有没有一种方法可以实现并行foreach循环?

2024-10-01 13:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在Python中有两个列表,我想并行地遍历每个列表—例如,对两个列表使用元素1,对两个列表使用元素2。。。我知道我可以通过使用索引来实现这一点:

for listIndex in range(len(list1)):
   doSomething(list1[listIndex])
   doSomething(list2[listIndex])

但是,有没有一种方法可以更直观地使用foreach循环来实现这一点呢?像for list1Value in list1, list2Value in list2。。。?在

我目前在Python中遇到过这种情况,但这是一个长期存在的问题,我很想知道您是否可以用任何语言来实现这一点。(我只是假设Python最有可能有一种方法来处理这个问题。)


Tags: 方法in元素列表forlenrange直观
3条回答

那要看语言了。Python实际上有一个相当简单的方法:

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

使用zip或{}进行此操作:

for item1, item2 in zip(iterable1, iterable2):
    # process the items in parallel

Python中的itertools.izip<;3和Python中的zip返回迭代器;也就是说,它们根据请求提供成对元组(或三元组、四元组等)。Python<;3zip创建了一个元组列表,因此如果最小的序列非常长,那么内存需求可能会很大。在

像这样?在

for (a,b) in zip(list1, list2):
  doSomething(a)
  doSomething(b)

尽管如果doSomething()不执行I/O或更新全局状态,并且它一次只对其中一个元素起作用,那么顺序并不重要,因此可以使用chain()(来自itertools):

^{pr2}$

顺便说一下,from itertools import *是我经常做的事情。考虑izip(),而不是使用我上面给出的zip()。另外请看一下izip_longest()izip(count(), lst)等。欢迎来到函数式编程。:-)

噢,而且拉链也适用于更多的“列”:

for idx, a, b, c in izip(count(), A, B, C):
  ...

相关问题 更多 >