萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> 程式語言綜合

Python collections 模組深度解析:高效資料結構工具箱

模組簡介

collections 是 Python 內建的高效資料結構模組,提供了多種強化版容器類型,解決標準 list、dict、tuple 在特定場景下的效能或功能不足問題。

核心類別詳解

1. namedtuple - 有名稱的元組

賦予元組欄位名稱,支援屬性存取,兼具不可變性與可讀性:

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x, p.y)        # 1 2
print(p[0], p[1])      # 1 2 (仍支援索引)
print(isinstance(p, tuple))  # True

適用場景:資料庫記錄、座標點、簡易資料傳輸物件(DTO)。

2. deque - 雙向佇列

針對頭尾插入/刪除優化為 O(1),適合佇列、堆疊、滑動窗口:

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')        # 右端加入
q.appendleft('y')    # 左端加入
print(q)             # deque(['y', 'a', 'b', 'c', 'x'])
q.pop()              # 右端彈出
q.popleft()          # 左端彈出

效能對比:list.pop(0) 為 O(n),deque.popleft() 為 O(1)。

3. defaultdict - 預設值字典

鍵不存在時自動呼叫工廠函數生成預設值,避免 KeyError 並簡化邏輯:

from collections import defaultdict

dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
print(dd['key1'])  # 'abc'
print(dd['key2'])  # 'N/A' (自動生成)

# 統計字元頻率
from collections import Counter
c = Counter('programming')
print(c)  # Counter({'g':2, 'm':2, 'r':2, 'a':1, 'i':1, 'o':1, 'n':1, 'p':1})

4. OrderedDict - 有序字典

保持鍵的插入順序(Python 3.7+ 標準 dict 也保序,但 OrderedDict 提供額外方法):

from collections import OrderedDict
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
print(list(od.keys()))  # ['z', 'y', 'x']

# 實現 FIFO 快取淘汰
class LastUpdatedOrderedDict(OrderedDict):
    def __init__(self, capacity):
        super().__init__()
        self._capacity = capacity
    def __setitem__(self, key, value):
        contains = 1 if key in self else 0
        if len(self) - contains >= self._capacity:
            self.popitem(last=False)  # 移除最舊
        if contains:
            del self[key]
        super().__setitem__(key, value)

5. Counter - 計數器

專為計數設計的 dict 子類,支援加減運算、最常見元素查詢:

c = Counter('abracadabra')
print(c.most_common(3))  # [('a', 5), ('b', 2), ('r', 2)]
c.update('xyz')
c.subtract('abc')

選型指南

需求推薦類別
不可變、有名稱欄位的資料記錄namedtuple
高頻頭尾插刪、佇列/堆疊deque
字典鍵自動初始化預設值defaultdict
需保證插入順序、實現 LRU/FIFOOrderedDict
元素頻率統計、多重集合運算Counter
copyright © 萬盛學電腦網 all rights reserved