Python 集合模組:進階容器類型
學習使用 Python 的集合模組。掌握Counter、defaultdict、namedtuple、deque,以及如何簡化複雜的資料結構。
概述
雖然 Python 的基本容器(列表、字典、集合和元組)足以完成大多數任務,但複雜的程式通常需要專門的資料結構。為了解決這個問題,Python 提供了內建的「collections」模組。此模組包含高效能容器資料類型,旨在更有效地解決常見的程式設計任務,並使用更清晰、更自記錄的語法。
最有用的類別是“defaultdict”,它的作用類似於普通字典,但會自動使用預設值(如空列表或整數零)初始化缺少的鍵,從而無需進行詳細的鍵檢查。另一個強大的功能是「Counter」類,專門針對計算可迭代中項目的出現次數進行了最佳化。對於快速佇列和堆疊,「deque」(雙端佇列)在兩端提供「O(1)」插入和刪除,這與遭受「O(N)」移位的清單不同。
最後,該模組提供了“namedtuple”,它創建輕量級的、類似元組的對象,可以使用點表示法和傳統索引進行存取(例如,“point.x”而不是“point[0]”)。這為您提供了元組的速度和不變性以及類別的可讀性。將集合模組合併到您的工作流程中可以保證您的程式碼保持優雅、高效能和乾淨。
程式碼和執行輸出
使用 Counter 統計單字並使用 defaultdict 組織字典組。
collections_demo.py
在編輯器中嘗試from collections import Counter, defaultdict, namedtuple
# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")
# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")
# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")端子輸出
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20逐步實施
- 透過計數器分析日誌檔案以計算錯誤發生次數
- 使用雙端隊列建立優先權隊列或任務調度程序
- 使用nametuple表示座標維度或資料記錄
常見問題解答
為什麼隊列操作的 deque 比 list 快?
清單需要在從前面插入或刪除時移動記憶體中的所有後續元素 (O(N))。雙端佇列被實作為雙向鍊錶,允許在兩端進行 O(1) 操作。
我可以更改命名元組的元素嗎?
不會。由於命名元組繼承自標準元組,因此它們是完全不可變的。您必須使用 ._replace() 方法傳回新的修改實例。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。