迭代列表作为python中的迭代器

时间:2015-03-17 15:19:50

标签: python iterator generator

我有一个返回对象列表的函数(例如,我使用了下面的代码)。每个对象都有一个名为text的属性:

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()一样使用它?

4 个答案:

答案 0 :(得分:3)

如果我理解正确,您正在寻找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

答案 1 :(得分:3)

您还可以使用生成器表达式:

mylist = (myobject(i) for i in range(5))

这将为您提供一个实际的生成器,但无需事先声明函数。

请注意使用括号而不是括号来表示生成器理解而不是列表理解

答案 2 :(得分:3)

乔治说了什么,或者你可以归还那份名单

def mylist():
    mylist = []
    for i in range(5):
        mylist.append(myobject(i))
    return iter(mylist)

将函数名称用作变量名称可能不是一个好主意,但是:)

答案 3 :(得分:0)

llist = [0,4,5,6] 
ii = iter(llist) 
while (True): 
    try: 
        print(next(ii)) 
    except StopIteration: 
        print('End of iteration.') 
        break