Is there a way to have parallel for-each loops?(有没有办法让 for-each 循环并行?)
问题描述
假设我在 Python 中有 2 个列表,我想并行遍历每个列表 - 例如对两个列表都使用元素 1,对两个列表使用元素 2……我知道我可以通过使用索引来做到这一点:
Let's say I have 2 lists in Python and I want to loop through each one in parallel - e.g. do something with element 1 for both lists, do something with element 2 for both lists... I know that I can do this by using an index:
for listIndex in range(len(list1)):
doSomething(list1[listIndex])
doSomething(list2[listIndex])
但是有没有办法通过 foreach 循环更直观地做到这一点?类似于 for list1Value in list1, list2Value in list2...?
But is there a way to do this more intuitively, with a foreach loop? Something like for list1Value in list1, list2Value in list2...?
我目前在 Python 中遇到过这种情况,但这是一个长期存在的问题,我很想知道您是否可以用任何语言做到这一点.(我只是假设 Python 最有可能有处理这个问题的方法.)
I've currently run into this situation in Python, but this is a longstanding question and I'd be interested to know if you can do this in any language. (I just assumed that Python is the most likely to have a method of dealing with this.)
推荐答案
像这样?
for (a,b) in zip(list1, list2):
doSomething(a)
doSomething(b)
虽然如果 doSomething() 没有进行 I/O 或更新全局状态,并且它一次只对其中一个元素起作用,但顺序并不重要,所以你可以使用 chain()(来自 itertools):
Though if doSomething() isn't doing I/O or updating global state, and it just works on one of the elements at a time, the order doesn't matter so you could just use chain() (from itertools):
for x in chain(list1, list2):
doSomething(x)
恰到好处,from itertools import * 是我经常做的事情.考虑使用 izip() 而不是使用我上面给出的 zip().另请查看izip_longest()、izip(count(), lst)等.欢迎使用函数式编程.:-)
Apropos, from itertools import * is something I do very often. Consider izip() instead of using the zip() I gave above. Also look into izip_longest(), izip(count(), lst), etc. Welcome to functional programming. :-)
哦,压缩也适用于更多列":
Oh, and zipping also works with more "columns":
for idx, a, b, c in izip(count(), A, B, C):
...
这篇关于有没有办法让 for-each 循环并行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:有没有办法让 for-each 循环并行?
基础教程推荐
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
