我在教程中发现了这个不错的陈述:
for x,y in [(x,y) for x in listA for y in listB]:
现在,就我而言,我理解这个语句会遍历listA和listB,x是listA中的一个值,y是listB中的一个值。但是,在这个示例中,这两个列表具有相同的长度。如果其中一个列表比另一个列表长,这个语句是否也会给我所有的配对,或者我需要使用不同的语句呢?
提前感谢。
我在教程中发现了这个不错的陈述:
for x,y in [(x,y) for x in listA for y in listB]:
itertools.product
函数),而不是你所建议的 zip
函数。
例如,如果输入为[1,2,3]
和[4,5]
,则结果为:
(1,4)
(1,5)
(2,4)
(2,5)
(3,4)
(3,5)
拿 zip([1,2,3], [4,5])
做比较,结果是:
(1,4)
(2,5)
如您所见,zip (或 itertools.izip) 会丢弃较长参数中的额外项。
其变体 itertools.izip_longest 用任意值替换这些缺失元素。例如,itertools.izip_longest([1,2,3], [4,5], 99)
返回 :
(1,4)
(2,5)
(3,99)
listA
和listB
中所有项目的组合。可以将其视为编写:for x in listA:
for y in listB:
…
我想为同时遍历两个列表添加一个答案。
alist = [1,2,3,4,5]
blist = [6,7,8,9,0]
for a,b in zip(alist,blist):
print a,"+",b,'=',a+b
它将会输出如下结果
1 + 6 = 7
2 + 7 = 9
3 + 8 = 11
4 + 9 = 13
5 + 0 = 5