我想同时迭代两个项目,在我看来这个迭代看起来像这样:
for elem1 in list 1 and for elem2 in list2:
do something to elem1; do something to elem2
但是,这种语法是不可接受的。为了清楚起见,我不是在谈论嵌套for循环,因为那时我将迭代第一个列表中每个元素的整个列表。我希望串联迭代两个列表(或其他)。有没有pythonic方式来做到这一点?
答案 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):