0

我有一个列表列表,并希望在每个列表中的每个元素上都有一个迭代器。

我的想法是编写一个包含两个变量的类:列表的迭代器和当前内部列表的迭代器。每当内部列表迭代器引发 StopIteration 时,我都会在外部列表迭代器上调用 next。我这样做的方式在下一个函数中包含很多嵌套的 if,所以我问你这样做的 pythonic 方式是什么。

例子:

lists = [[1, 2].__iter__(), [3, 4].__iter__()]

现在我需要一个迭代器对象来迭代 1、2、3 和 4。因为我正在使用的列表非常大,所以我只能使用迭代器。

4

2 回答 2

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
于 2013-06-26T17:56:28.717 回答
1

使用 izip:izip(*nested)或者如果你在 Python 3.x 上只使用 'zip'

*运算符是参数解包运算符,它允许元组或列表通过语句“展开”。另一个例子是:

list = (1, 2, 3, 4, 5)

a, *bcd, e = list # a=1, bcd=[2,3,4] and e=5
于 2013-06-26T18:12:40.063 回答