Python編程:集合工具類(lèi)之計(jì)數(shù)器(Counter)詳解與實(shí)踐
前言
本文繼續(xù)來(lái)盤(pán)Python內(nèi)置集合模塊,這期主要介紹其中的工具類(lèi)計(jì)數(shù)器類(lèi)(Counter)類(lèi)的使用。我們還是采用“短平快”的模式——文字+代碼,助你多快好省的學(xué)會(huì)它,并能都收用上它。閑話少敘,開(kāi)始正文——
Counter
Counter是一個(gè)dict子類(lèi),用于計(jì)數(shù)可哈希對(duì)象。它是一個(gè)集合,其中元素被存儲(chǔ)為字典鍵,它們的計(jì)數(shù)值被存儲(chǔ)為字典值。計(jì)數(shù)值可為任何整數(shù)值,包括零或負(fù)計(jì)數(shù)。Counter類(lèi)類(lèi)似于其他語(yǔ)言中的包或多集。
計(jì)數(shù)的元素來(lái)自可迭代對(duì)象或另一個(gè)初始化的映射(或計(jì)數(shù)器)。下面是Python中創(chuàng)建Counter對(duì)象的一些方式。請(qǐng)看示例代碼:
程序運(yùn)行結(jié)果如下所示:
Counter對(duì)象有一個(gè)字典接口,只是它們會(huì)為丟失的項(xiàng)返回一個(gè)零計(jì)數(shù),而不是引發(fā)KeyError,示例如下:
輸出結(jié)果如下:
從Counter中刪除元素
要從Counter中刪除元素,可以使用del關(guān)鍵字。請(qǐng)記住,將計(jì)數(shù)設(shè)置為零并不會(huì)從計(jì)數(shù)器中刪除一個(gè)元素。請(qǐng)看示例代碼:
輸出結(jié)果為:
如代碼所示,我們將0設(shè)置為計(jì)數(shù)器中不存在的項(xiàng)。Python將該項(xiàng)以零值添加到Counter中。在第7行中,我們使用del關(guān)鍵字完全刪除該項(xiàng)。很明顯,計(jì)數(shù)為0,并不會(huì)刪除Counter中的計(jì)數(shù)項(xiàng),而要?jiǎng)h除之,得用del命令才行。
Counter方法
Counter對(duì)象除了支持所有字典可用的方法之外,以下是其特有最常見(jiàn)方法:返回一個(gè)迭
1)elements():
返回迭代器,其為重復(fù)相應(yīng)元素次數(shù)與其計(jì)數(shù)值相等的迭代器。按第一次遇到的順序返回元素。如果一個(gè)元素的計(jì)數(shù)小于1,elements()將忽略它。示例如下:
輸出結(jié)果為:
2)most_common([n]):
返回n個(gè)最常見(jiàn)元素的列表,元素的計(jì)數(shù)大小從最大到最小。如果省略n或None, most_common()將返回計(jì)數(shù)器中的所有元素。計(jì)數(shù)相等的元素按第一次遇到的順序排列:
輸出結(jié)果為:
3)subtract([iterable-or-mapping]):
從可迭代對(duì)象或另一個(gè)映射(或計(jì)數(shù)器)中減去元素。像dict.update(),但是減去計(jì)數(shù)而不是替換它們。輸入和輸出都可能是零或負(fù)的。示例如下:
輸出結(jié)果如下:
4)兩個(gè)方法
通常的字典方法可用于Counter對(duì)象,但有兩個(gè)方法針對(duì)計(jì)數(shù)器的工作方式不同:
fromkeys(iterable):
這個(gè)類(lèi)方法Counter對(duì)象沒(méi)實(shí)現(xiàn)。
update([iterable-or-mapping]):
從可迭代對(duì)象中計(jì)數(shù)元素,或從另一個(gè)映射(或計(jì)數(shù)器)中添加元素。類(lèi)似dict.update(),但Counter是增加計(jì)數(shù)而不是替換它們。而且,迭代對(duì)象應(yīng)該是元素序列,而不是(鍵,值)對(duì)的序列。示例如下:
請(qǐng)注意下面的輸出結(jié)果:
1.1.1 數(shù)學(xué)式操作
Counter提供了幾種數(shù)學(xué)操作來(lái)組合Counter對(duì)象運(yùn)算,以生成多集(計(jì)數(shù)大于零的計(jì)數(shù)器)。加減法通過(guò)加減相應(yīng)元素的計(jì)數(shù)來(lái)合并計(jì)數(shù)器。交集和并集返回對(duì)應(yīng)計(jì)數(shù)的最小值和最大值。每個(gè)操作都可以接受帶符號(hào)計(jì)數(shù)值的輸入,但輸出將排除計(jì)數(shù)為零或更少的結(jié)果。
輸出結(jié)果類(lèi)似如下:
一元加減法是與空計(jì)數(shù)器相加或與空計(jì)數(shù)器相減的快捷方式。示例如下:
輸出結(jié)果如下:
簡(jiǎn)而言之,可利用Counter對(duì)象實(shí)現(xiàn)一些相關(guān)數(shù)據(jù)的統(tǒng)計(jì)分析。
本文小結(jié)
本篇文章主要介紹了Python內(nèi)置集合模塊的工具類(lèi)Counter的使用,并結(jié)合代碼和描述,以期深入淺出的幫助你更好的理解和掌握Counter相關(guān)內(nèi)容和應(yīng)用。若是初學(xué)者,記得一定要?jiǎng)邮謱?shí)踐一把才是最佳學(xué)習(xí)模式。