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