假设我在Python中有2个列表,我希望并行遍历每个列表 - 例如对两个列表执行元素1操作,对两个列表执行元素2操作...我知道我可以通过使用索引来执行此操作:
for listIndex in range(len(list1)):
doSomething(list1[listIndex])
doSomething(list2[listIndex])
但是有没有办法通过foreach循环更直观地做到这一点?像for list1Value in list1, list2Value in list2
......?
我目前在Python中遇到过这种情况,但这是一个长期存在的问题,我很想知道你是否可以用任何语言做到这一点。 (我只是假设Python最有可能有一种方法来解决这个问题。)
答案 0 :(得分:14)
这样的东西?
for (a,b) in zip(list1, list2):
doSomething(a)
doSomething(b)
虽然如果doSomething()
没有进行I / O或更新全局状态,并且它一次只对其中一个元素起作用,顺序无关紧要,所以你可以使用{{1} }(来自itertools):
chain()
Apropos,for x in chain(list1, list2):
doSomething(x)
是我经常做的事情。考虑from itertools import *
而不是使用我上面提到的izip()
。另请查看zip()
,izip_longest()
等。欢迎使用函数式编程。 : - )
哦,压缩也适用于更多“列”:
izip(count(), lst)
答案 1 :(得分:4)
这取决于语言。 Python实际上有一个相当简单的方法:
a = (0,1,2,3,4,5,6,7,8,9)
b = "ABCDEFGHIJ"
for pair in zip(a,b):
print("%d => %s" % pair)
答案 2 :(得分:4)
使用zip
或itertools.izip
:
for item1, item2 in zip(iterable1, iterable2):
# process the items in parallel
Python中的 itertools.izip
< Python中的3和zip
≥3返回迭代器;即根据要求他们提供成对的元组(或三元组,四重奏等)。 Python< 3 zip
创建一个元组列表,因此如果最小的序列很长,内存需求可能很大。