Python常用模塊--collections

 

collections是Python中一個非常強大的容器數據模塊。

 

1.創建升級版的元組--namedtupe

Python的元組(1,2,3)具有不可變性,但是單獨的元組在無法滿足現有需求時,可以使用升級版的元組,使用namedtupe可以很方便地定義一種數據類型,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "問道編程"
__date__ = "2019/03/18 12:37"

from collections import namedtuple

Point = namedtuple('Ponit', ['x', 'y']) # 實例化一個tupe對象,並規定了對象數量以及屬性:x、y
p = Point(1,3) # 賦值
print(p.x) # 通過屬性訪問數據
print(p.y)

 

2.創建升級版的列表--deque

使用list存儲數據時,可以非常方便的進行查詢和尾部操作(append、pop),但是在頭部添加、刪除時效率很低(最大時間複雜度爲n),所以有了deque,可以實現高效的頭、尾的操作,適合用於隊列和棧:

from collections import deque

q = deque([1,2,3])
q.append(6) # [1,2,3,6] 同list一樣進行尾部添加、刪除操作
q.pop() # [1,2,3]
q.appendleft('x') # ['x',1,2,3] 頭部添加
q.popleft() # [1,2,3] 頭部刪除

 

3.創建升級版字典--defaultdict

常用的dict使用鍵值對存儲數據,但當使用key訪問匹配的值,而key不存在時會報錯,而使用defaultdict可以規定一個默認值,當使用不存在的key查詢字典的值時,會返回一個指定的默認值:

from collections import defaultdict

d = defaultdict(lambda: 'N/A') # 創建defaultdict對象,是字典類型的子集,並規矩默認值是 N/A
d['a'] = 1
print(d['a']) # 1 正常輸出
print(d['b']) # N/A key不存在時,輸出默認值

 

4.創建有順序的字典--OrderedDict

常用的dict是不記錄鍵值對順序的,使用OrderedDict可以創建相對有序的字典,該類型可記錄字典的輸入順序,但不能自動進行排序:

from collections import OrderedDict

d = OrderedDict()
d['a'] = 1
d['b'] = 2

print(d.keys()) # ['a','b'] 會按照key值的錄入順序進行打印

 

5.創建多個字典的映射--ChainMap

官方解釋:一個 ChainMap 類是爲了將多個映射快速的鏈接到一起,這樣它們就可以作爲一個單元處理。它通常比創建一個新字典和多次調用 update() 要快很多。

通俗的說,是創建一將多個字典鏈接到一起的映射,底層通過list實現,查詢時,從第一個字典映射開始查,如果第一個字典沒有,查詢第二個,依次類推,但是更新、刪除數據時僅對於第一個字典映射操作。

通常在進行拼接命令行時,可以對參數進行優先選擇,比如用戶輸入數據、環境傳入、默認值。

參考:https://docs.python.org/zh-cn/3/library/collections.html

 

6.功能強大的列表計數功能--Counter

from collections import Counter

arr = [1,2,3,3,3,6,2,2,2] # 1出現1次,2出現4次,3出現3次,6出現1次
print(arr.count(3)) # 3 可以使用list的count方法獲取指定值的出現次數
cou = Counter(arr)
pirnt(cou) # Counter({3: 3, 2: 2, 1: 1, 5: 1, 6: 1}) 屬於字典的子集

for k,v in cou.items():
print(k,v) # 對Counter進行遍歷,打印結果
print(cou.most_common(2)) # [(3,3),(2,2)]  返回出現次數最高的前兩個數字及次數

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章