双重迭代

时间:2013-01-08 07:14:43

标签: python iteration

  

可能重复:
  How to iterate over two lists - python

我想同时迭代两个项目,在我看来这个迭代看起来像这样:

for elem1 in list 1 and for elem2 in list2:
    do something to elem1; do something to elem2

但是,这种语法是不可接受的。为了清楚起见,我不是在谈论嵌套for循环,因为那时我将迭代第一个列表中每个元素的整个列表。我希望串联迭代两个列表(或其他)。有没有pythonic方式来做到这一点?

1 个答案:

答案 0 :(得分:11)

使用zip()

for elem1, elem2 in zip(list1, list2):

如果其中一个列表比另一个列表长,则不会看到超出较短列表长度的元素。

在python 2上,zip()导致两个列表压缩在一起的副本,以及可能成为内存负担的大型列表。对这些较大的列表使用itertools.izip(),它会返回一个迭代器。在python 3上,zip()本身已经返回一个迭代器。

如果您需要循环遍历最长列表(并为缺少的较短列表元素填写填充值),请改为使用itertools.izip_longest()

from itertools import izip_longest

for elem1, elem2 in izip_longest(list1, list2):