如何在 Python 中循环浏览多个列表
mo abdelazim
2023年1月30日
2020年9月19日
本教程解释了如何在 Python 中同时迭代两个列表/元组。我们将使用 zip()
和 itertools.zip_longest()
,并解释它们之间的区别以及如何使用每一个。我们还将看到在 Python 2 和 3 中,zip()
的返回类型有什么不同。
Python 3.x 中的 zip()
函数
zip()
函数接受多个列表/元组作为参数,并返回一个 zip
对象,它是元组的迭代器。
使用 zip()
在两个列表中进行迭代
将两个列表传递给 zip()
函数,并使用 for
循环来迭代结果迭代器。
listA = [1,2,3,4]
listB = [10,20,30,40]
for a,b in zip(listA,listB):
print(a,b)
输出:
1 10
2 20
3 30
4 40
使用 zip()
迭代两个不同长度的列表
如果列表的长度不同,zip()
会在最短的列表结束时停止。请看下面的代码。
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a,b in zip(listA,listB):
print(a,b)
输出:
1 10
2 20
3 30
4 40
使用 itertools.zip_longest()
来迭代两个列表
如果你需要遍历两个列表,直到最长的一个结束,使用 itertools.zip_longest()
。它的工作原理和 zip()
函数一样,只是在最长的列表结束时停止。
它用 None
填充空值,并返回一个元组的迭代器。
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a,b in itertools.zip_longest(listA,listB):
print(a,b)
输出:
1 10
2 20
3 30
4 40
5 None
6 None
默认的 fillvalue
是 None,但你可以将 fillvalue
设置为任何值。
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a,b in itertools.zip_longest(listA,listB,fillvalue=0):
print(a,b)
输出:
1 10
2 20
3 30
4 40
5 0
6 0
使用 zip()
来处理多个列表
zip()
及其同级函数可以接受两个以上的列表。
import itertools
codes = [101,102,103]
students = ["James","Noah","Olivia"]
grades = [65,75,80]
for a,b,c in itertools.zip_longest(codes,students,grades,fillvalue=0):
print(a,b,c)
输出:
101 James 65
102 Noah 75
103 Olivia 80
Python 2.x 中的 zip()
函数
zip()
函数在 Python 2.x 中也接受多个列表/元组作为参数,但返回一个元组列表。这对于小的列表来说很好,但是如果你有巨大的列表,你应该使用 itertools.izip()
来代替,因为它返回一个元组的迭代器。
使用 itertools.izip()
来迭代两个列表
import itertools
listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]
for a,b in itertools.izip(listA,listB):
print(a,b)
输出:
1 10
2 20
3 30
4 40