如何在 Python 中迴圈瀏覽多個列表

mo abdelazim 2023年1月30日
  1. Python 3.x 中的 zip() 函式
  2. Python 2.x 中的 zip() 函式
如何在 Python 中迴圈瀏覽多個列表

本教程解釋瞭如何在 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

相關文章 - Python List