是否可以在不迭代的情况下将列表类型转换为生成器



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

编辑:删除了cast这个词,以明确我想要实现的目标。

编辑2:实际上,我认为我可能在根本层面上误解了生成器。这将教会我不要在早上喝咖啡之前发布如此多的问题!

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

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

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

事实上,你的语法是一个迭代器:

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

而不是使用给出列表的[...]

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

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

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)

我不确定你的意思,但你输入的是有效的 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

接下来是关键:

next(iter([]), None)

您可以在其中将 None 替换为您想要的任何默认值

最新更新