是否有可能将列表类型转换为生成器而不进行迭代?

Phi*_*ham 32 python list generator

我知道可以将生成器转换为"低级别"(例如list(i for i in xrange(10)))的列表,但是可以在不先遍历列表的情况下进行反向(例如.(i for i in range(10)))吗?

编辑:删除这个词是cast为了清楚我正在努力实现的目标.

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

Joh*_*hin 51

试试这个:an_iterator = iter(a_list)...... 文档在这里.那是你要的吗?

  • 提问者问的是将列表转换为生成器.`iter()`返回一个不是生成器的迭代器. (20认同)

Don*_*Don 14

您可以使用内置函数list(...)和列表中的迭代器通过使用以下内容从迭代器中获取列表iter(...):

mylist = list(myiterator)
myiterator = iter(mylist)
Run Code Online (Sandbox Code Playgroud)

实际上,您的语法一个迭代器:

iter_10 = (i for i in range(10))
Run Code Online (Sandbox Code Playgroud)

而不是使用[...]哪个给出一个列表.

看看这个答案隐藏Python的功能

  • 你说“确实,你的语法是一个迭代器”,但它实际上不是一个生成器。`myiterator` 和 `iter_10` 是不同的类型。 (2认同)

Zau*_*bov 7

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

list_iter = list.__iter__() # or iter(list), returns list iterator
list_iter.__next__() # list_iter.next() for python 2.x
Run Code Online (Sandbox Code Playgroud)

所以,

lst_iter = iter(lst)
Run Code Online (Sandbox Code Playgroud)

诀窍.

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

lst_iter_gt_10 = (item for item in lst if item > 10)
Run Code Online (Sandbox Code Playgroud)