如何在 Python 中循环浏览多个列表
mo abdelazim
2023年1月30日
本教程解释了如何在 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