5.3.2 Counter对象
Counter類提供一個(gè)方便和快速統(tǒng)計(jì)的工具。
例子:
#python?3.4
import?collections
?
cnt?=?collections.Counter()
for?word?in?['red',?'blue',?'red',?'green',?'blue',?'blue']:
????cnt[word]?+=?1
print(cnt)
結(jié)果輸出如下:
Counter({'blue':?3,?'red':?2,?'green':?1})
?
從這個(gè)例子里可以看到,對(duì)單詞進(jìn)行統(tǒng)計(jì),不需要分別記住不同單詞進(jìn)行增加,只調(diào)用一個(gè)簡(jiǎn)單的動(dòng)作,就可以完成了。
?
class?collections.Counter([iterable-or-mapping])?
Counter類是繼承字典類,并且基于HASH保存。因而它是不排序的容器,把元素當(dāng)作鍵,而把計(jì)數(shù)當(dāng)作鍵值。計(jì)數(shù)的數(shù)值是整數(shù),可以是0和負(fù)數(shù)。
創(chuàng)建一個(gè)Counter對(duì)象時(shí),可以從迭代對(duì)象里創(chuàng)建,也可以從一個(gè)映射對(duì)象,或者Counter對(duì)象創(chuàng)建。
例子:
#python?3.4
import?collections
?
cnt?=?collections.Counter()
print(cnt)
cnt?=?collections.Counter('this?is?for?test')
print(cnt)
cnt?=?collections.Counter({'red':?4,?'blue':?2})
print(cnt)
cnt?=?collections.Counter(cats?=?4,?dogs?=?10)
print(cnt)
結(jié)果輸出如下:
Counter()
Counter({'t':?3,?'s':?3,?'?':?3,?'i':?2,?'r':?1,?'f':?1,?'h':?1,?'o':?1,?'e':?1})
Counter({'red':?4,?'blue':?2})
Counter({'dogs':?10,?'cats':?4})
?
在使用Counter對(duì)象時(shí)要注意兩點(diǎn):1.?當(dāng)訪問(wèn)一個(gè)不存在的元素時(shí),它返回0值,而不是拋出異常。2.?設(shè)置一個(gè)元素為0值,并不是把這個(gè)元素刪除,而需要調(diào)用del來(lái)把元素刪除。
例子:
#python?3.4
import?collections
?
cnt?=?collections.Counter({'red':?4,?'blue':?2})
print(cnt)
print(cnt['white'])
cnt['red']?=?0
print(cnt)
print('開(kāi)始刪除:')
del?cnt['red']
print(cnt)
結(jié)果輸出如下:
Counter({'red':?4,?'blue':?2})
0
Counter({'blue':?2,?'red':?0})
開(kāi)始刪除:
Counter({'blue':?2})
?
Counter類除了支持字典類所有方法外,還增加下面三個(gè)方法:
elements()?
返回一個(gè)迭代器,按每個(gè)元素的統(tǒng)計(jì)的次數(shù)來(lái)返回多少次這個(gè)元素的值。元素返回的順序是隨機(jī)的,并且當(dāng)元素統(tǒng)計(jì)的值為0時(shí)不輸出此元素。
例子:
#python?3.4
import?collections
?
cnt?=?collections.Counter(a=4,?b=2,?c=0,?d=-2)
print(cnt)
print(list(cnt.elements()))
結(jié)果輸出如下:
Counter({'a':?4,?'b':?2,?'c':?0,?'d':?-2})
['a',?'a',?'a',?'a',?'b',?'b']
?
most_common([n])?
返回統(tǒng)計(jì)頻率最高的前n個(gè)元素。如果n沒(méi)有指定,就返回所有元素。返回的順序會(huì)是從大到小的順序。
例子:
#python?3.4
import?collections
?
cnt?=?collections.Counter(a=4,?b=2,?c=0,?d=-2)
print(cnt)
print(cnt.most_common(2))
結(jié)果輸出如下:
Counter({'a':?4,?'b':?2,?'c':?0,?'d':?-2})
[('a',?4),?('b',?2)]
?
subtract([iterable-or-mapping])?
Counter元素與另外一個(gè)迭代對(duì)象或映射對(duì)象進(jìn)行相同元素相減的操作。
例子:
#python?3.4
import?collections
?
cnt1?=?collections.Counter(a=4,?b=2,?c=0,?d=-2)
cnt2?=?collections.Counter(a=1,?b=2,?c=3,?d=4)
?
print(cnt1)
print(cnt2)
cnt1.subtract(cnt2)
print(cnt1)
結(jié)果輸出如下:
Counter({'a':?4,?'b':?2,?'c':?0,?'d':?-2})
Counter({'d':?4,?'c':?3,?'b':?2,?'a':?1})
Counter({'a':?3,?'b':?0,?'c':?-3,?'d':?-6})
?
fromkeys(iterable)
這個(gè)方法在?Counter對(duì)象沒(méi)有實(shí)現(xiàn)。
?
update([iterable-or-mapping])?
從一個(gè)迭代器或者另一個(gè)映射對(duì)象里添加元素的統(tǒng)計(jì)值。
例子:
#python?3.4
import?collections
?
cnt1?=?collections.Counter(a=4,?b=2,?c=0,?d=-2)
cnt2?=?collections.Counter(a=1,?b=2,?c=3,?d=4)
?
print(cnt1)
print(cnt2)
cnt1.update(cnt2)
print(cnt1)
結(jié)果輸出如下:
Counter({'a':?4,?'b':?2,?'c':?0,?'d':?-2})
Counter({'d':?4,?'c':?3,?'b':?2,?'a':?1})
Counter({'a':?5,?'b':?4,?'c':?3,?'d':?2})
?
對(duì)Counter對(duì)象進(jìn)行一些公共的操作:
sum(c.values())?????????????????#?計(jì)算所有計(jì)數(shù)。
c.clear()???????????????????????#?復(fù)位所有計(jì)數(shù)。
list(c)?????????????????????????#?生成列表
set(c)??????????????????????????#?生成集合
dict(c)?????????????????????????#?生成普通字典
c.items()???????????????????????#?返回(elem,?cnt)對(duì)的列表
Counter(dict(list_of_pairs))????#?從(elem,?cnt)的列表創(chuàng)建Counter
c.most_common()[:-n-1:-1]???????#?n個(gè)最常用元素返回
+c??????????????????????????????#?刪除0和負(fù)數(shù)計(jì)數(shù)
?
Counter對(duì)象的算術(shù)運(yùn)算:
#python?3.4
import?collections
?
cnt1?=?collections.Counter(a=4,?b=2,?c=0,?d=-2)
cnt2?=?collections.Counter(a=1,?b=2,?c=3,?d=4)
?
print(cnt1)
print(cnt2)
print('cnt1?+?cnt2:',?cnt1?+?cnt2)
print('cnt1?-?cnt2:',?cnt1?-?cnt2)
print('cnt1?&?cnt2:',?cnt1?&?cnt2)
print('cnt1?|?cnt2:',?cnt1?|?cnt2)
print('+cnt1:',?+cnt1)
print('-cnt1:',?-cnt1)
結(jié)果輸出如下:
Counter({'a':?4,?'b':?2,?'c':?0,?'d':?-2})
Counter({'d':?4,?'c':?3,?'b':?2,?'a':?1})
cnt1?+?cnt2:?Counter({'a':?5,?'b':?4,?'c':?3,?'d':?2})
cnt1?-?cnt2:?Counter({'a':?3})
cnt1?&?cnt2:?Counter({'b':?2,?'a':?1})
cnt1?|?cnt2:?Counter({'d':?4,?'a':?4,?'c':?3,?'b':?2})
+cnt1:?Counter({'a':?4,?'b':?2})
-cnt1:?Counter({'d':?2})
蔡軍生 QQ;9073204 ?深圳
總結(jié)
以上是生活随笔為你收集整理的5.3.2 Counter对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mysql优化之explain你真的会吗
- 下一篇: 中国农业大学2020计算机院线,2020