【问题标题】:Iterate elements on multiple python lists在多个 python 列表上迭代元素
【发布时间】:2013-08-07 19:42:04
【问题描述】:

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

假设我有 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

但这个解决方案在我看来并不像 Python 一样,效率也不高,所以我正在寻找更好的方法。

【问题讨论】:

  • 你总是可以在单独的循环中迭代l1,然后迭代l2。如果循环中有太多代码不值得重复,只需将其抽象为一个函数即可。然而,话虽如此,chain 几乎总是最好的答案,正如 F.J 所建议的那样。例如,如果你想使用一个geneexpr 或listcomp 或函数而不是一个显式循环,你不能把它分成两个genexpr。 (好吧,您可以...但只能通过在结果上调用chain,所以您不妨一开始就使用chain...)

标签: python iteration


【解决方案1】:

你可以使用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

【讨论】:

  • 这是最 Pythonic 的方法,+1
  • 感谢您的回答。我想我必须停止要求 pythonic 解决方案。我知道你的答案是最python的,但我要找的是Rohit Jain的另一个。嗯,正如我所说,我必须停止要求 pythonics,但再次感谢。 (而且不是我投了反对票,嗯?而且,我投了你的票:D)
【解决方案2】:

你可以直接遍历l1 + l2:

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> 
>>> for e in l1 + l2:
...     print e

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2011-10-06
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多