如何并行迭代两个数组?

时间:2016-04-19 17:31:42

标签: python

我看起来能够并行迭代两个数组(或只有一个for循环)。

这是我试过的剧本......

  File "./twoarr.py", line 12
    for ( word, roman ) in (list1 list2):
                                      ^
SyntaxError: invalid syntax

但是当我收到语法错误时显然不正确:

one from list1
I from list2
two from list1
II from list2
three from list1
III from list2
IV from list2
V from list2

我想获得看起来像这样的输出:

{{1}}

4 个答案:

答案 0 :(得分:5)

您可以使用zip来迭代2个列表。

>>> list1 = [ 'one', 'two', 'three' ]
>>> list2 = [ 'I', 'II', 'III', 'IV', 'V' ]
>>> for (x, y) in zip(list1, list2):
...     print x + " from list1"
...     print y + " from list2"
... 
one from list1
I from list2
two from list1
II from list2
three from list1
III from list2

注意zip将提供直到列表很小。因此,在您的情况下,list1包含3个元素,list2包含5个元素,因此zip将仅提供3个元素的数据。您可以使用izip_longest覆盖list2

中的所有元素

答案 1 :(得分:3)

我有类似的要求,由

实施
for i in range(len(list1)):
    print list1[i], list2[i]
如果列表长度不一样,

需要更多检测,或者使用一些try / except语句来避免无效索引

答案 2 :(得分:2)

要迭代多个列表,您可以使用内置函数zip。根据{{​​3}},此函数返回元组列表,其中第i个元组包含来自每个参数序列或迭代的第i个元素。因此,适用于您的特定示例

list1 = [ 'one', 'two', 'three' ]
list2 = [ 'I', 'II', 'III', 'IV', 'V' ]

for word in list1:
    print word + " from list1"

for roman in list2:
    print roman + " from list2"

for word, roman in zip(list1 list2):
    print word + " from list1"
    print roman + " from list2"

zip的唯一缺点是当你的列表(如本例中)长度不等时,zip将返回一个元组列表,每个元组的维度等于较小的元组。要支持最长的一个,并在必要时填写无,只需将zip替换为Documentation

from itertools import izip_longest

list1 = [ 'one', 'two', 'three' ]
list2 = [ 'I', 'II', 'III', 'IV', 'V' ]

for word in list1:
    print word + " from list1"

for roman in list2:
    print roman + " from list2"

for word, roman in izip_longest(list1, list2):
    print word + " from list1"
    print roman + " from list2"

答案 3 :(得分:1)

如果您希望它不仅仅混合两个列表,而是真正运行并行使用两个线程:

import _thread

def print_list(name, list):
    for word in list:
        print(word + " from " + name + "\r\n");

list1 = [ 'one', 'two', 'three' ]
list2 = [ 'I', 'II', 'III', 'IV', 'V' ]

_thread.start_new_thread( print_list, ("list1",list1) )
_thread.start_new_thread( print_list, ("list2",list2) )