如何并行迭代两个数组?

Red*_*ket 2 python

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

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

#!/usr/bin/env python

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 (list1 list2):
         if word:
                 print word + " from list1"

    if roman:
        print roman + " from list2"
Run Code Online (Sandbox Code Playgroud)

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

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

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

one from list1
I from list2
two from list1
II from list2
three from list1
III from list2
IV from list2
V from list2
Run Code Online (Sandbox Code Playgroud)

Ale*_*dro 8

要迭代多个列表,您可以使用内置函数zip。根据文档,该函数返回一个元组列表,其中第 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"
   
Run Code Online (Sandbox Code Playgroud)

zip 的唯一缺点是,当您的列表(如本示例中所示)长度不相等时,zip 将返回一个元组列表,每个元组的维度等于较小的元组。为了支持最长的一个,并在必要时填充 None,只需将 zip 替换为itertools.izip_longest

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"
Run Code Online (Sandbox Code Playgroud)


Nil*_*esh 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
Run Code Online (Sandbox Code Playgroud)

注意: zip将提供到小的列表.所以在你的情况下,list1有3个元素并且list2有5个元素,所以zip只给3个元素提供数据.你可以izip_longest用来到达所有元素list2

  • __注意:__什么? (4认同)