我看起来能够并行迭代两个数组(或只有一个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)
要迭代多个列表,您可以使用内置函数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)
您可以使用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
| 归档时间: |
|
| 查看次数: |
2217 次 |
| 最近记录: |