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 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。