Python統(tǒng)計(jì)可散列的對(duì)象之容器Counter詳解
一、初始化Counter
Counter支持3種形式的初始化,比如提供一個(gè)數(shù)組,一個(gè)字典,或單獨(dú)鍵值對(duì)“=”式賦值。具體初始化的代碼如下所示:
import collections
a = collections.Counter(['a', 'a', 'b', 'b', 'b', 'c'])
b = collections.Counter({"a": 2, "b": 3, "c": 1})
c = collections.Counter(a=2, b=3, c=1)
print(a)
print(b)
print(c)
運(yùn)行之后,效果如下:

這種是直接通過(guò)構(gòu)造函數(shù)進(jìn)行填充。當(dāng)然,我們還可以直接構(gòu)造一個(gè)空Counter,然后通過(guò)update()函數(shù)進(jìn)行填充。
import collections a = collections.Counter() a.update(['a', 'a', 'b', 'b', 'b', 'c']) print(a)
運(yùn)行效果和上面的a一樣,這里就不上圖了,感興趣的讀者自己測(cè)試運(yùn)行。
二、遍歷Counter
通過(guò)上面初始化以及更新,我們Counter容器中存在了很多的值。因?yàn)檩敵龅氖亲值涞男问剑晕覀兛梢灾苯油ㄟ^(guò)字典的方式進(jìn)行訪問(wèn)。
import collections
a = collections.Counter()
a.update(['a', 'a', 'b', 'b', 'b', 'c'])
for key in 'abcde':
print(key, "=", a[key])
運(yùn)行之后,效果如下:

可以看到容器Counter,可以輸出空值不報(bào)錯(cuò)。因?yàn)楫?dāng)我們沒(méi)有找到某個(gè)值時(shí),其默認(rèn)計(jì)數(shù)為0。
三、elements()
當(dāng)然,如果你想實(shí)現(xiàn)那種輸出沒(méi)有0值的遍歷??梢允褂胑lements()迭代器。具體代碼如下:
import collections
a = collections.Counter()
a.update('caabbbc')
print(list(a.elements()))
運(yùn)行之后,效果如下:

需要注意的是,elements()雖然去除了0值,但并不能保證遍歷順序。
四、most_common
most_common()函數(shù)可以生成一個(gè)序列,統(tǒng)計(jì)包含n個(gè)最長(zhǎng)遇到的輸入值以及相應(yīng)的計(jì)數(shù)。這里,我們來(lái)實(shí)現(xiàn)統(tǒng)計(jì)一個(gè)文檔中,字母出現(xiàn)的個(gè)數(shù)。具體代碼如下:
import collections
c = collections.Counter()
with open('英文文檔.txt', 'rt') as f:
for line in f:
c.update(line.rstrip().lower())
for letter, count in c.most_common(5):
print("{}:{}".format(letter, count))
運(yùn)行之后,效果如下:

這里統(tǒng)計(jì)的英文文檔中,空格最多,達(dá)到了658個(gè)。其他的一次都是前幾最多的個(gè)數(shù)。這樣我們可以通過(guò)Counter生成一個(gè)英文文檔中字母的頻度分布,在自然語(yǔ)言的處理當(dāng)中。就可以完美的結(jié)合起來(lái)進(jìn)行統(tǒng)計(jì)使用。
五、算數(shù)操作
Counter容器不僅可以統(tǒng)計(jì)頻度的分布。還可以進(jìn)行一些算數(shù)運(yùn)算。比如將兩個(gè)Counter容器進(jìn)行相加進(jìn)行統(tǒng)計(jì),亦或者相減也行。具體操作如下:
import collections
c1 = collections.Counter('abcbcabds')
c2 = collections.Counter('abcbcabds')
print("原始值:")
print(c1)
print(c2)
print("算數(shù)運(yùn)算后:")
print(c1 + c2)
print(c1 - c2)
print(c1 & c2)
print(c1 | c2)
運(yùn)行之后,效果如下:

到此這篇關(guān)于Python統(tǒng)計(jì)可散列的對(duì)象之容器Counter詳解的文章就介紹到這了,更多相關(guān)Python容器Counter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python將一組數(shù)分成每3個(gè)一組的實(shí)例
今天小編就為大家分享一篇python將一組數(shù)分成每3個(gè)一組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Django利用LogEntry生成歷史操作實(shí)戰(zhàn)記錄
LogEntry是在后臺(tái)開(kāi)發(fā)中經(jīng)常用到的模塊,它在admin是默認(rèn)開(kāi)啟的。文中給大家介紹了在admin頁(yè)面上查看操作日志的方法及實(shí)戰(zhàn)代碼,感興趣的朋友跟隨小編一起看看吧2021-12-12
python基礎(chǔ)教程項(xiàng)目四之新聞聚合
這篇文章主要為大家詳細(xì)介紹了python基礎(chǔ)教程項(xiàng)目四之新聞聚合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Python直接使用plot()函數(shù)畫(huà)圖的方法實(shí)例
Python非常簡(jiǎn)單而又非常強(qiáng)大,它的功能之一就是畫(huà)出漂亮的圖表,實(shí)現(xiàn)數(shù)據(jù)的可視化,下面這篇文章主要給大家介紹了關(guān)于Python直接使用plot()函數(shù)畫(huà)圖的相關(guān)資料,需要的朋友可以參考下2022-05-05
利用Python實(shí)現(xiàn)批量下載上市公司財(cái)務(wù)報(bào)表
這篇文章主要為大家介紹了如何利用Python做個(gè)小工具,可以批量把某網(wǎng)站上的上市公司的財(cái)報(bào)下下來(lái)。文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手試一試2022-03-03
基于Flask實(shí)現(xiàn)文件上傳七牛云中并下載
文件上傳是Web應(yīng)用中常見(jiàn)的功能之一,而七牛云則提供了強(qiáng)大的云存儲(chǔ)服務(wù),本文我們將學(xué)習(xí)如何在Flask應(yīng)用中實(shí)現(xiàn)文件上傳,并將上傳的文件保存到七牛云,感興趣的可以學(xué)習(xí)一下2023-10-10
python實(shí)現(xiàn)機(jī)器人行走效果
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)機(jī)器人行走效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python放大圖片和畫(huà)方格實(shí)現(xiàn)算法
這篇文章主要為大家詳細(xì)介紹了python放大圖片和畫(huà)方格實(shí)現(xiàn)算法,實(shí)現(xiàn)圖片的放大縮小功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
python實(shí)現(xiàn)線(xiàn)性插值的示例
線(xiàn)性插值是針對(duì)一維數(shù)據(jù)的插值方法,它根據(jù)一維數(shù)據(jù)序列中需要插值的點(diǎn)的左右臨近兩個(gè)數(shù)據(jù)來(lái)進(jìn)行數(shù)值估計(jì),這篇文章主要介紹了python實(shí)現(xiàn)線(xiàn)性插值,需要的朋友可以參考下2022-12-12

