如何在 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