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

问题描述 投票:0回答:4

我有一个返回对象列表的函数(例如,我使用下面的代码)。每个对象都有名为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()一样使用它?

python iterator generator
4个回答
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

3
投票

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

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

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

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


3
投票

乔治说了什么,或者您可以返回该列表的重复项

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

尽管使用函数名作为变量名可能不是一个好主意,但是:)


0
投票
llist = [0,4,5,6] 
ii = iter(llist) 
while (True): 
    try: 
        print(next(ii)) 
    except StopIteration: 
        print('End of iteration.') 
        break 
© www.soinside.com 2019 - 2024. All rights reserved.