是否可以将列表类型转换为生成器而无需迭代?

时间:2011-05-09 07:42:08

标签: python list generator

我知道可以将生成器转换为“低级别”的列表(例如list(i for i in xrange(10))),但是可以在没有迭代列表的情况下执行反向首先(例如(i for i in range(10)))?

修改:删除了cast这个词,以明确我正在努力实现的目标。

编辑2:实际上,我认为我可能在基本层面上误解了发电机。这将教会我在早晨喝咖啡之前不要发布SO问题!

4 个答案:

答案 0 :(得分:49)

试试这个:an_iterator = iter(a_list) ... docs here。这就是你想要的吗?

答案 1 :(得分:14)

您可以使用内置函数list(...)以及使用iter(...)列表中的迭代器从迭代器中取出列表:

mylist = list(myiterator)
myiterator = iter(mylist)

的确,您的语法迭代器:

iter_10 = (i for i in range(10))

而不是使用[...]来提供列表。

看一下这个答案Hidden features of Python

答案 2 :(得分:7)

实际上,列表可能拥有迭代器接口:

list_iter = list.__iter__() # or iter(list), returns list iterator
list_iter.__next__() # list_iter.next() for python 2.x

所以,

lst_iter = iter(lst)

诀窍。

虽然使用理解并用它制造发电机更有意义:例如

lst_iter_gt_10 = (item for item in lst if item > 10)

答案 3 :(得分:4)

我不确定你的意思,但你键入的是有效的Python代码:

>>> x = (i for i in range(10))
>>> x
<generator object at 0xb7f05f6c>
>>> for i in x: print i
0
1
2
3
4
5
6
7
8
9