Python中的collections模塊提供了一些有用的數據結構,如列表、元組、字典和集合等。
以下是collections模塊中一些常用數據結構的用法:
- Counter類
Counter類是一個字典子類,用于計數可哈希對象。
它可以接受一個可迭代對象作為參數,并返回一個字典,其中鍵是可迭代對象中的元素,值是元素出現的次數。
from collections import Counterlst = [1, 2, 3, 2, 1, 3, 1]
counter = Counter(lst)
print(counter) # 輸出{1: 3, 2: 2, 3: 2}
- OrderedDict類
OrderedDict類是一個有序字典,它可以按照元素添加的順序來迭代字典中的元素。
與普通字典不同的是,OrderedDict類在創建時需要傳入一個元素為鍵值對的列表。
from collections import OrderedDictod = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
for k, v in od.items():print(k, v) # 輸出a 1 b 2 c 3
3.deque類
deque類是一個雙端隊列,可以在隊列的兩端進行插入和刪除操作。
它支持快速從隊列兩端添加或刪除元素。
from collections import dequed = deque([1, 2, 3])
d.appendleft(0) # 在隊列頭部添加元素
d.append(4) # 在隊列尾部添加元素
print(d) # 輸出deque([0, 1, 2, 3, 4])
4.defaultdict類
defaultdict類是一個帶有默認值的字典,當訪問不存在的鍵時,會自動創建一個默認值。
它可以通過傳遞一個函數作為參數來創建。
from collections import defaultdictdd = defaultdict(int)
dd['a'] += 1
dd['b'] += 2
print(dd) # 輸出defaultdict(<class 'int'>, {'a': 1, 'b': 2})
5.namedtuple
namedtuple是一個工廠函數,用于創建一個具有命名字段的元組子類。
它可以使代碼更易讀和維護,因為可以通過名稱而不是索引來訪問元組中的元素。
from collections import namedtuplePerson = namedtuple('Person', ['name', 'age', 'gender'])
p = Person('Tom', 20, 'male')
print(p.name) # 輸出Tom
print(p.age) # 輸出20
print(p.gender) # 輸出male
6.ChainMap
ChainMap是一個字典子類,它將多個字典鏈接在一起,形成一個單一的字典。
當訪問一個不存在的鍵時,ChainMap會沿著鏈接的字典一直查找,直到找到該鍵或到達鏈表的末尾。
from collections import ChainMapdict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict3 = {'d': 5}
chain = ChainMap(dict1, dict2, dict3)
print(chain['a']) # 輸出1
print(chain['b']) # 輸出2
print(chain['c']) # 輸出3
print(chain['d']) # 輸出5
print(chain['e']) # 拋出KeyError異常