Python進階——Collections模組
阿新 • • 發佈:2018-11-06
首先匯入這個模組:
import collections
1.計數器
Couter 是collections 模組提供的計數器
c=Counter() #空的計數器
c=Counter('gallahad') # 從一個可迭代的物件構造
c=Counter({'red':4,'blue':2}) # 從一個集合對映中構造
c=Counter(cats=4,dogs=8) # 使用鍵值隊引數
例子1:統計下面一段文字中各個單詞出現的次數:
# 去掉字串中的標點
from string import punctuation
sentence = "One,two,three,one,two,tree!!!!"
for word in sentence:
if word in punctuation:
sentence=sentence.replace(word," ")
print(sentence)
print(punctuation)。
輸出為:
One two three one two tree
!"#$%&'()*+,-./:;<=> [email protected][\]^_`{|}~
word_list=sentence.lower().split() # 將sentence 中的字母都轉為小寫字母,並用空格分開
t = collections.Counter(word_list) # 利用word_list 序列生成一個計數器
print(t['one']) # 計算鍵值的個數 對不存在的鍵輸出為 0
1.計數器可以看作特殊的字典,支援字典的大部分操作,向字典中新增鍵
t['somethings']=100 # 插入新的計數結果 t['somethings']=-2 #可以將鍵的計數結果設為負數 t['somethings']='test' # 可以將鍵的值設為非數字 print(t) 輸出為: Counter({'three': 1, 'tree': 1, 'two': 2, 'one': 2, 'somethings': 'test'})
2.刪除鍵為somtthings的鍵
del t['somethings'] #
print(t)
輸出為:
Counter({'two': 2, 'one': 2, 'three': 1, 'tree': 1})
3.查詢前n 個常見的元素,該方法返回的結果按照
print(t.most_common(2))
4.方法elements()返回一個按照元素計數次數返回元素的迭代器,該方法忽略所有計數小於1的元素:
c=collections.Counter(a=4,b=2,c=0,d=-2) t1=list(c.elements()) print(t1) 輸出結果: ['b', 'b', 'a', 'a', 'a', 'a']
計數器支援的符號運算:
c+d:對應的元素計數相加
c-d:對應的元素的計數相減
c|d:對應的元素的計數取並:即最大值
c&d:對應的元素的計數取交:即最小值
注意,這些運算返回的結果會將非正次數的元素去掉
對於計數物件c , 常用的操作有:
print(sum(c.values())) #輸出總數
print(c.most_common()[:-n-1:-1])# 輸出次數最少的n個元素
c+=collections.Counter() # 去除非正次書的元素
print(c.clear()) #重置計數器
list(c) # 得到無寵物元素的列表
2.雙端佇列
deque 是 collections 模組提供的雙端佇列
雙端佇列支援將元素從隊尾插入的操作
dp=deque()
for i in range(10):
dp.appendleft(i) # 可以從隊頭出入雙端佇列
print(dp)
輸出為:
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
雖然列表也有同樣的方式,但會比這個慢得多
對應彈出元素的方法為 .pop() 和 .popleft()
3.有序字典
OrderedDict 是collections 模組提供的有序字典,有序字典是指按鍵值書序排列的字典,我們構建內容相同的普通字典和有序字典。
items=[('A',1),('B',2),('C',3)]
regular_dict=dict(items)
ordered_dict=collections.OrderedDict(items)
for k,v in regular_dict.items():
print(k,v)
輸出結果:
A 1
C 3
B 2
for k,v in ordered_dict.items():
print(k,v)
輸出結果:
A 1
B 2
C 3
4.帶預設值的字典
defaultdict 是collections 模組提供的帶預設值的子代呢,對於普通字典,索引不存在的鍵會丟擲一場,帶預設值的字典可以在定義時設定一個預設值,當索引不存在的鍵時候,帶預設值的字典會將鍵的值更新為預設值。
# 預設值為空的列表
dd=collections.defaultdict(list)
dd['foo']
輸出結果為:[]
# 預設值為0和0.0
dd=collections.defaultdict(int)
print(dd['foo'])
輸出值為:0
dd=collections.defaultdict(float)
print(dd['foo'])
輸出值為:0.0
# 還可用Lambda 表示式來構造自定義的函式
dd=collections.defaultdict(lambda :2)
print(dd['foo'])
輸出為:2