Python遍历两个列表

时间:2011-09-02 12:45:40

标签: python list traversal

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

    for x,y in [(x,y) for x in listA for y in listB]:

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

提前致谢。

3 个答案:

答案 0 :(得分:13)

代码根据您的建议计算笛卡尔积(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用任意值替换这些缺失的元素。例如,iterttools.izip_longest([1,2,3], [4,5], 99)返回:

(1,4)
(2,5)
(3,99)

答案 1 :(得分:6)

该示例将生成listAlistB中所有项目的所有组合。把它想象为写作

for x in listA:
    for y in listB:
        …

答案 2 :(得分:0)

我想为时间遍历两个列表添加一个答案。

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