Python 推導式:列表推導式、字典推導式與集合推導式

編寫更乾淨、更快的 Python。透過實際範例、篩選條件和巢狀迴圈掌握清單、字典和集合推導式。

在編輯器中嘗試

概述

推導式是 Python 最受歡迎的功能之一,它提供了一種簡潔且高度可讀的語法,用於從現有的可迭代物件建立新的集合(列表、字典和集合)。推導式可讓您在單行富有表現力的程式碼中執行相同的轉換、過濾和賦值,而不是編寫多行「for」迴圈和手動附加項目。

列表推導式是最常見的變體,結構為「[可迭代 if 條件中項目的表達式]」。在底層,Python 優化了推導式,以接近 C 的速度運行,通常優於等效的手動「for」循環,因為循環是由底層解釋器處理的。它們非常適合快速轉換,例如將攝氏溫度清單轉換為華氏溫度,或從使用者記錄清單中提取特定按鍵。

除了列表之外,Python 還支援字典和集合推導式。使用花括號和鍵值對定義的字典理解(例如,“{key: value for x in iterable}”)對於反轉映射對或解析元資料非常有用。集合推導式會透過自動刪除重複項來產生唯一的集合。雖然推導式非常強大,但開發人員應該避免使其過於複雜化;如果推導式需要嵌套循環或複雜條件,則傳統的「for」循環通常更易於閱讀和維護。

程式碼和執行輸出

演示清單轉換、條件過濾以及從映射輸入建立字典。

comprehensions.py
在編輯器中嘗試
numbers = [1, 2, 3, 4, 5, 6]

# List comprehension with filter (even squares)
even_squares = [x**2 for x in numbers if x % 2 == 0]

# Set comprehension (unique word lengths)
words = ["python", "java", "ruby", "python"]
word_lengths = {len(w) for w in words}

# Dictionary comprehension (number: square)
square_map = {n: n**2 for n in numbers[:4]}

print(f"Even squares: {even_squares}")
print(f"Unique lengths: {word_lengths}")
print(f"Square mapping: {square_map}")
端子輸出
Even squares: [4, 16, 36]
Unique lengths: {4, 6}
Square mapping: {1: 1, 2: 4, 3: 9, 4: 16}

逐步實施

  • 從日誌中過濾掉空值或無效數據
  • 將 API 有效負載映射到鍵值資料映射
  • 快速將資料庫行格式化為簡單列表

常見問題解答

理解比普通循環更快嗎?

是的,在大多数情况下它们更快,因为迭代是由 Python 解释器中优化的 C 代码处理的。

我應該始終使用推導式嗎?

不,程式碼可讀性是 python 的首要任務。如果推導式具有巢狀邏輯或長度超過一兩行,則首選傳統迴圈。

相關主題

推薦的 Python 資源

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