我有一个列表列表,希望获得每个列表中每个元素的迭代器。
我的想法是编写一个包含两个变量的类:列表上的迭代器和当前内部列表上的迭代。每当内部列表迭代器引发StopIteration时,我在外部列表迭代器上调用next。我这样做的方式在下一个函数中包含了很多嵌套ifs所以我问你这样做的pythonic方法是什么。
示例:
lists = [[1, 2].__iter__(), [3, 4].__iter__()]
现在我需要一个迭代超过1,2,3和4的迭代器对象。因为我正在使用的列表非常大,所以我只能使用迭代器。
答案 0 :(得分:4)
使用itertools.chain.from_iterable()
:
from itertools import chain
for elem in chain.from_iterable(nested_list):
演示:
>>> from itertools import chain
>>> nested_list = [['a', 'b'], ['c', 'd']]
>>> for elem in chain.from_iterable(nested_list):
... print elem,
...
a b c d
答案 1 :(得分:1)
如果您使用的是Python 3.x
,请使用izip:izip(*nested)
或仅使用'zip'
*
运算符是参数解包运算符,它允许元组或列表通过语句“展开”。另一个例子是:
list = (1, 2, 3, 4, 5)
a, *bcd, e = list # a=1, bcd=[2,3,4] and e=5