有没有办法让每个循环并行?

fro*_*die 11 python iteration parallel-processing foreach

假设我在Python中有2个列表,我想并行遍历每个列表 - 例如对两个列表执行元素1的操作,对两个列表执行元素2的操作...我知道我可以通过使用指数:

for listIndex in range(len(list1)):
   doSomething(list1[listIndex])
   doSomething(list2[listIndex])
Run Code Online (Sandbox Code Playgroud)

但是有没有办法通过foreach循环更直观地做到这一点?有点像for list1Value in list1, list2Value in list2......?

我目前在Python中遇到过这种情况,但这是一个长期存在的问题,我很想知道你是否能用任何语言做到这一点.(我只是假设Python最有可能有一个方法来解决这个问题.)

int*_*ger 14

像这样的东西?

for (a,b) in zip(list1, list2):
  doSomething(a)
  doSomething(b)
Run Code Online (Sandbox Code Playgroud)

虽然如果doSomething()没有进行I/O或更新全局状态,并且它一次只能处理其中一个元素,顺序无关紧要,所以你可以使用chain()(来自itertools):

for x in chain(list1, list2):
  doSomething(x)
Run Code Online (Sandbox Code Playgroud)

Apropos,from itertools import *我经常做的事情.考虑izip()而不是使用zip()我上面给出的.还应考虑izip_longest(),izip(count(), lst)等欢迎的功能编程.:-)

哦,压缩也适用于更多的"列":

for idx, a, b, c in izip(count(), A, B, C):
  ...
Run Code Online (Sandbox Code Playgroud)


Hou*_*und 5

这将取决于语言。Python实际上有一个相当简单的方法:

a = (0,1,2,3,4,5,6,7,8,9)
b = "ABCDEFGHIJ"
for pair in zip(a,b):
  print("%d => %s" % pair)
Run Code Online (Sandbox Code Playgroud)