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