我看起来能够并行迭代两个数组(或只有一个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}}
答案 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) )