我知道可以将生成器转换为“低级别”的列表(例如list(i for i in xrange(10))
),但是可以在没有迭代列表的情况下执行反向首先(例如(i for i in range(10))
)?
修改:删除了cast
这个词,以明确我正在努力实现的目标。
编辑2:实际上,我认为我可能在基本层面上误解了发电机。这将教会我在早晨喝咖啡之前不要发布SO问题!
答案 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