如何在 Python 中使用 zip() 函數(組合可迭代物件)

了解如何使用 Python 的 zip() 函數並行組合多個可迭代物件。掌握字典創建、解壓縮邏輯以及處理長度不符。

在編輯器中嘗試此解決方案

概述

迭代資料集時,您通常需要並行處理多個相關清單。例如,將使用者名稱清單與使用者 ID 清單配對,或符合 X 和 Y 值的座標。 Python 提供了優雅的「zip()」函數,而不是巢狀循環或使用清單索引計數器存取項目。

`zip(*iterables)` 函數接受多個可迭代物件作為參數並聚合它們,傳回一個元組迭代器,其中第 i 個元組包含每個輸入可迭代物件中的第 i 個元素。這使您可以使用單一“for”循環輕鬆地同時循環兩個或多個集合。

預設情況下,當最短的輸入迭代用盡時,「zip()」停止組合。較長迭代中的任何剩餘元素都將被丟棄。如果您想要對元素進行配對,直到最長的可迭代物件耗盡,並用佔位符填充缺失值,Python 在標準庫的「itertools」模組中提供了「zip_longest()」。

程式碼和執行輸出

此腳本演示了並行列表迭代、使用 zip 建立字典以及使用 zip_longest 處理不匹配。

zip_function.py
在編輯器中嘗試
from itertools import zip_longest

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]

# 1. Basic Zipping in a loop
print("--- Parallel Iteration ---")
for name, score in zip(names, scores):
    print(f"{name} scored {score}")

# 2. Creating a dictionary from two lists
user_dict = dict(zip(names, scores))
print("\nCreated Dictionary:", user_dict)

# 3. Handling unequal list lengths with zip_longest
extra_names = ["Alice", "Bob", "Charlie", "David"]
short_scores = [85, 90]

# Standard zip truncates
print("\nStandard zip output:", list(zip(extra_names, short_scores)))

# zip_longest fills missing values
zipped_long = list(zip_longest(extra_names, short_scores, fillvalue="N/A"))
print("zip_longest output:", zipped_long)
端子輸出
--- Parallel Iteration ---
Alice scored 85
Bob scored 90
Charlie scored 95

Created Dictionary: {'Alice': 85, 'Bob': 90, 'Charlie': 95}

Standard zip output: [('Alice', 85), ('Bob', 90)]
zip_longest output: [('Alice', 85), ('Bob', 90), ('Charlie', 'N/A'), ('David', 'N/A')]

逐步實施

  • 將要組合的多個列表或可迭代物件傳遞給 zip() 函數。
  • 將產生的元組解壓縮到 for 迴圈語句中,以實現乾淨的平行迭代。
  • 使用 dict(zip(keys_list, value_list)) 將 zip 物件轉換為字典進行映射。
  • 導入 itertools.zip_longest 以組合不等長的列表,而不會遺失尾部值。

常見問題解答

如何「解壓縮」壓縮的元組序列?

您可以使用解包運算子 *:list(zip(*zipped_tuples)) 將序列解壓縮回單獨的清單。

zip() 是否複製記憶體中的元素?

不,zip() 傳回一個可按需產生元素的迭代器,使其具有極高的記憶體效率。

相關主題

推薦的 Python 資源

透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。