如何在 Python 中迴圈瀏覽多個列表
mo abdelazim
2023年1月30日
Python
Python List
本教程解釋瞭如何在 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
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe