collections.Counter 用法
原文檔連接
文章目錄
- 簡介
- 方法
- 字典方法
- 特殊方法
- elements()
- most_common([n])
- subtract([iterable-or-mapping])
- 算術(shù)運(yùn)算
- 注意
簡介
計(jì)數(shù)器是用于計(jì)數(shù)可哈希對象的dict子類。它是一個(gè)集合,其中元素存儲(chǔ)為字典鍵,其計(jì)數(shù)存儲(chǔ)為字典值。計(jì)數(shù)可以是任何整數(shù)值,包括零或負(fù)計(jì)數(shù)。
元素是從一個(gè)可迭代的對象計(jì)數(shù)或從另一個(gè)映射(或計(jì)數(shù)器)初始化的
c = Counter() # a new, empty counter c = Counter('gallahad') # a new counter from an iterable c = Counter({'red': 4, 'blue': 2}) # a new counter from a mapping c = Counter(cats=4, dogs=8) # a new counter from keyword argsCounter對象具有一個(gè)字典接口,當(dāng)訪問不存在的值時(shí),它為缺失項(xiàng)返回0計(jì)數(shù),而字典會(huì)引發(fā)KeyError(因?yàn)樵L問了字典中不存在的鍵):
c = Counter(['eggs', 'ham']) c['bacon'] # count of a missing element is zero將計(jì)數(shù)設(shè)置為零不會(huì)將元素從計(jì)數(shù)器中刪除。使用del將其完全刪除:
c['sausage'] = 0 # counter entry with a zero count del c['sausage'] # del actually removes the entry作為dict的子類,Counter繼承了記住插入順序的功能。對Counter對象的數(shù)學(xué)運(yùn)算也保留順序。根據(jù)在左操作數(shù)中首先遇到元素的時(shí)間,然后按照在右操作數(shù)中遇到的順序,對結(jié)果進(jìn)行排序。
方法
字典方法
常用的詞典方法可用于Counter對象,但有兩種方法對Counter的工作方式不同。
- fromkeys(iterable)
沒有為Counter對象實(shí)現(xiàn)此類方法。 - update([iterable-or-mapping])
元素是從可迭代的或從另一個(gè)映射(或計(jì)數(shù)器)添加的元素中計(jì)數(shù)的。像dict.update()一樣,但是添加計(jì)數(shù)而不是替換它們。同樣,可迭代對象應(yīng)該是元素序列,而不是(key,value)對序列。(在某種層面上,可以理解為加法運(yùn)算)
特殊方法
除了適用于所有詞典的方法外,Counter對象還支持三種方法:
elements()
在元素上返回一個(gè)迭代器,并重復(fù)與其計(jì)數(shù)相等的次數(shù)。元素按首先遇到的順序返回。如果一個(gè)元素的數(shù)量少于一個(gè),elements()將忽略它。
c = Counter(a=4, b=2, c=0, d=-2) sorted(c.elements()) # 返回結(jié)果 # ['a', 'a', 'a', 'a', 'b', 'b']most_common([n])
返回n個(gè)最常見元素的列表及其從最常見到最小的計(jì)數(shù)。如果省略n或None,則most_common()返回計(jì)數(shù)器中的所有元素。具有相等計(jì)數(shù)的元素按首先遇到的順序排序:
Counter('abracadabra').most_common(3) # 結(jié)果 # [('a', 5), ('b', 2), ('r', 2)]subtract([iterable-or-mapping])
從可迭代對象或另一個(gè)映射(或計(jì)數(shù)器)中減去元素。像dict.update()一樣,但是減去計(jì)數(shù)而不是替換它們。輸入和輸出都可以為零或負(fù)。
c = Counter(a=4, b=2, c=0, d=-2) d = Counter(a=1, b=2, c=3, d=4) c.subtract(d) c # 結(jié)果 # Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})算術(shù)運(yùn)算
下面四個(gè)算術(shù)運(yùn)算結(jié)果只含有計(jì)數(shù)為正的項(xiàng),否則就是一個(gè)空Counter()對象。subtract()和update()方法則沒有這些特質(zhì)。
c = Counter(a=3, b=1) d = Counter(a=1, b=2) c + d # add two counters together: c[x] + d[x] # 結(jié)果:Counter({'a': 4, 'b': 3}) c - d # subtract (keeping only positive counts) # 結(jié)果:Counter({'a': 2}) c & d # intersection: min(c[x], d[x]) # 結(jié)果:Counter({'a': 1, 'b': 1}) c | d # union: max(c[x], d[x]) # 結(jié)果:Counter({'a': 3, 'b': 2})c = Counter(a=2, b=-4) +c # 結(jié)果: Counter({'a': 2}) -c # 結(jié)果: Counter({'b': 4})注意
Counter()主要用于與正整數(shù)一起表示運(yùn)行計(jì)數(shù)。但是,請注意不要不必要地排除需要其他類型或負(fù)值的用例。為了幫助解決這些用例,本節(jié)介紹了最小范圍和類型限制。
- Counter類本身是一個(gè)字典子類,對其鍵和值沒有限制。這些值旨在為代表計(jì)數(shù)的數(shù)字,但是您可以在值字段中存儲(chǔ)任何內(nèi)容。
- most_common()方法僅要求值是可排序的。 對于原地操作,例如c [key] + = 1,值類型僅需要支持加法和減法。因此,分?jǐn)?shù)、浮點(diǎn)數(shù)和小數(shù)將起作用,并且支持負(fù)值。update()和subtract()也是如此,它們允許輸入和輸出均為負(fù)值和零值。
- 多重集方法僅設(shè)計(jì)用于具有正值的用例。輸入可以為負(fù)或零,但僅創(chuàng)建具有正值的輸出。沒有類型限制,但是值類型需要支持加,減和比較。
- elements()方法需要整數(shù)計(jì)數(shù)。它忽略零和負(fù)計(jì)數(shù)。
總結(jié)
以上是生活随笔為你收集整理的collections.Counter 用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识C++——类与对象的详细说明(二)
- 下一篇: 中国微观企业实证研究常用指标集合(200