是否可以不迭代将列表转换为生成器?
我知道可以把生成器转换成列表,这个过程比较简单,比如用 list(i for i in xrange(10))
这样的写法。但是,有没有办法在不先遍历列表的情况下,把列表变回生成器呢?比如像 (i for i in range(10))
这样?
编辑:为了更清楚我想表达的意思,我把“cast”这个词去掉了。
编辑 2:其实,我觉得我可能对生成器的理解有点偏差。看来我应该等喝完早咖啡再来发问题!
5 个回答
9
确实,一个列表可以拥有迭代器的接口:
list_iter = list.__iter__() # or iter(list), returns list iterator
list_iter.__next__() # list_iter.next() for python 2.x
所以,
lst_iter = iter(lst)
这样就可以实现了。
不过,使用列表推导式(comprehensions)来创建一个生成器会更合理,比如:
lst_iter_gt_10 = (item for item in lst if item > 10)
15
你可以通过使用内置的函数 list(...)
从一个迭代器中提取出一个列表,而从一个列表中提取出迭代器则可以使用 iter(...)
。
mylist = list(myiterator)
myiterator = iter(mylist)
实际上,你的语法 确实 是一个迭代器:
iter_10 = (i for i in range(10))
而不是使用 [...]
,那样会得到一个列表。
可以看看这个回答 Python 的隐藏特性
56
试试这个:an_iterator = iter(a_list)
... 文档在这里。这就是你想要的吗?