Python遍历两个列表

mar*_*kus 3 python traversal list

我在教程中找到了这个很好的陈述:

    for x,y in [(x,y) for x in listA for y in listB]:
Run Code Online (Sandbox Code Playgroud)

现在,就我而言,我明白,该规则将遍历listA和listB,x是列表A的值,y是listB中的值.但在这个例子中,两个列表具有相同的长度.如果一个列表比另一个列表长,或者我必须使用不同的语句,这个语句是否也会给我所有对?

提前致谢.

phi*_*hag 13

代码计算笛卡尔积(itertools.product),而不是zip您建议的那样.

例如,如果输入为[1,2,3][4,5],则结果为:

(1,4)
(1,5)
(2,4)
(2,5)
(3,4)
(3,5)
Run Code Online (Sandbox Code Playgroud)

为了比较,结果zip([1,2,3], [4,5])是:

(1,4)
(2,5)
Run Code Online (Sandbox Code Playgroud)

如您所见,zip(或itertools.izip)会丢弃较长参数中的其他项.

它的变体itertools.izip_longest用任意值替换这些缺少的元素.例如,iterttools.izip_longest([1,2,3], [4,5], 99)返回:

(1,4)
(2,5)
(3,99)
Run Code Online (Sandbox Code Playgroud)


igo*_*gor 6

这个例子将产生的所有项目的所有组合listAlistB.把它想象成写作

for x in listA:
    for y in listB:
        …
Run Code Online (Sandbox Code Playgroud)