在 python 中作为迭代器迭代列表
iterate over a list as iterator in python
我有一个 returns 对象列表的函数(例如,我使用了下面的代码)。每个对象都有名为文本的属性:
def mylist():
mylist = []
for i in range(5):
elem = myobject(i)
mylist.append(elem)
return mylist
for obj in mylist():
print obj.text
如何重写此代码,以便 mylist() 每次迭代都返回新值并迭代迭代器?换句话说,我如何在这里重用 python 中的 mylist,以便像 xrange()?
一样使用它
如果我没理解错的话,你正在寻找 generators:
def mylist():
for i in range(5):
elem = myobject(i)
yield elem
完整代码供您玩:
class myobject:
def __init__(self, i):
self.text = 'hello ' + str(i)
def mylist():
for i in range(5):
elem = myobject(i)
yield elem
for obj in mylist():
print obj.text
您还可以使用生成器表达式:
mylist = (myobject(i) for i in range(5))
这将为您提供一个实际的生成器,但无需事先声明函数。
请注意使用圆括号而不是方括号来表示生成器理解而不是列表理解
乔治说的,或者你可以return那个列表的迭代器
def mylist():
mylist = []
for i in range(5):
mylist.append(myobject(i))
return iter(mylist)
不过,将您的函数名称用作变量名称可能不是一个好主意:)
llist = [0,4,5,6]
ii = iter(llist)
while (True):
try:
print(next(ii))
except StopIteration:
print('End of iteration.')
break
我有一个 returns 对象列表的函数(例如,我使用了下面的代码)。每个对象都有名为文本的属性:
def mylist():
mylist = []
for i in range(5):
elem = myobject(i)
mylist.append(elem)
return mylist
for obj in mylist():
print obj.text
如何重写此代码,以便 mylist() 每次迭代都返回新值并迭代迭代器?换句话说,我如何在这里重用 python 中的 mylist,以便像 xrange()?
一样使用它如果我没理解错的话,你正在寻找 generators:
def mylist():
for i in range(5):
elem = myobject(i)
yield elem
完整代码供您玩:
class myobject:
def __init__(self, i):
self.text = 'hello ' + str(i)
def mylist():
for i in range(5):
elem = myobject(i)
yield elem
for obj in mylist():
print obj.text
您还可以使用生成器表达式:
mylist = (myobject(i) for i in range(5))
这将为您提供一个实际的生成器,但无需事先声明函数。
请注意使用圆括号而不是方括号来表示生成器理解而不是列表理解
乔治说的,或者你可以return那个列表的迭代器
def mylist():
mylist = []
for i in range(5):
mylist.append(myobject(i))
return iter(mylist)
不过,将您的函数名称用作变量名称可能不是一个好主意:)
llist = [0,4,5,6]
ii = iter(llist)
while (True):
try:
print(next(ii))
except StopIteration:
print('End of iteration.')
break