1

如何以最 Pythonic 的方式迭代多个列表?

假设我有 2 个列表:

l1 = [1, 2, 3]
l2 = [4, 5, 6]

如何在不改变 l1 和 l2 的情况下实现对 l1 和 l2 中的整个元素集的迭代?

我可以简单地加入两个列表,然后迭代结果:

l3 = l1[:]
l3.extend(l2)
for e in l3:
  # ... whatever with e

但是这个解决方案对我来说听起来并不像pythonic,也没有效率,所以我正在寻找更好的方法。

4

3 回答 3

6

您可以使用itertools.chain()

import itertools
for e in itertools.chain(l1, l2):
    print e

这不需要为迭代创建临时列表,不像l1 + l2. 它也适用于任意迭代和不同类型的序列。例如:

>>> l1 = (1, 2, 3)
>>> l2 = [4, 5, 6]
>>> l1 + l2        # can't loop over l1 + l2...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "list") to tuple
>>> import itertools
>>> for e in itertools.chain(l1, l2):
...     print e
...
1
2
3
4
5
6
于 2013-08-07T19:43:55.497 回答
4

您可以直接迭代l1 + l2

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> 
>>> for e in l1 + l2:
...     print e
于 2013-08-07T19:43:26.607 回答
1

使用列表连接运算符+(ie, l1 + l2) 并对其进行迭代。

于 2013-08-07T19:44:57.023 回答