collections模組常用類清單及示例
一、Counter類
用途:用於對資料進行統計,並能自動按照元素出現次數進行排序。還可透過update方法繼續新增資料進行統計,以及使用most_common方法獲取出現次數最多的前幾個元素。
示例程式碼:
python
複製
from collections import Counter
# 對字串中的字元進行統計
result = Counter("sfasfsfsdfdsfdsfsfdsfwkjewrjwi")
print(result)
# 加入更多資料接著統計
result.update("sdfsdfsd")
print(result)
# 獲取出現次數最多的前3個元素
print(result.most_common(3))
二、defaultdict類
用途:幫助我們建立一個預設值為統一型別的字典,避免在訪問不存在的鍵時因未定義值型別和初始值而報錯,簡化了對字典值進行某種操作(如計數)的過程。
示例程式碼:
python
複製
# 要把list轉dict並計算列表中元素重複個數(常規方式)
list_t = ["A", "C", "B", "F", "B"]
dicts_t = {}
for item in list_t:
dicts_t.setdefault(item, 0)
dicts_t[item] += 1
print(dicts_t)
# 使用defaultdict實現上述功能(更簡單化這個過程)
from collections import defaultdict
dic_b = defaultdict(int)
for item in list_t:
dic_b[item] += 1
print(dic_b)
三、deque類(雙佇列)
用途:一般用於實現先進後出的佇列操作,插入和移除資料比常規列表快,但遍歷查詢效能相對較差。
示例程式碼:
點選檢視程式碼
python
複製
from collections import deque
my_que = deque(["A", "B", "C", "D"])
print(my_que)
my_que.append("F")
print(my_que)
my_que.pop()
print(my_que)
四、namedtuple類
用途:快捷幫助我們生成一個類似常用的Class物件類,適用於需要輸出一個簡單物件但又不想完整定義一個類的情況,類似一次性使用的物件。
示例程式碼:
點選檢視程式碼
python
複製
import logging
logging.basicConfig(level="INFO")
# 傳統寫法定義類並建立物件
class Student():
def __init__(self, name, age) -> None:
self.name = name
self.age = age
def __str__(self) -> str:
return f"name:{self.name},age:{self.age}"
student = Student("zhangsan", 15)
print(student)
# 使用collection的namedtuple建立類似物件
from collections import namedtuple
User = namedtuple("User", ["name", "age"])
user1 = User("lisi", 20)
user2 = User("wangwu", 30)
logging.info(user1)
五、OrderedDict類
用途:能夠保證字典的插入順序,並非是對字典按照鍵或值進行排序。不過在 Python 3.7 版本及以上,普通字典已經是按照插入順序寫入,所以OrderedDict的使用場景相對減少。
示例程式碼:
點選檢視程式碼
python
複製
from collections import OrderedDict
my = {"A": 1, "F": 4, "G": 3, "B": 8}
my["G"] = 6
print(my)
my_order = OrderedDict(my)
my_order["H"] = 2
my_order.move_to_end("F")
print(my_order)