1. 程式人生 > >Python進階——Collections模組

Python進階——Collections模組

首先匯入這個模組:

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