繁体   English   中英

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

[英]iterate over a list as iterator in python

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

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

如果我理解正确,您正在寻找发电机

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))

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

请注意使用括号而不是括号来表示生成器推导式而不是列表推导式

什么乔治说,或者你可以返回该列表的迭代

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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM