计数器Counter对象-collections- 容器数据类型(28)Python语言(必读进阶学习教程)(参考资料)
>>> c['sausage'] = 0 # counter entry with a zero count >>> del c['sausage'] # del actually removes the entry
提供计数器工具以支持方便和快速的计数。例如:
-
>>> >>> # Tally occurrences of words in a list >>> cnt = Counter() >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: ... cnt[word] += 1 >>> cnt Counter({'blue': 3, 'red': 2, 'green': 1}) >>> # Find the ten most common words in Hamlet >>> import re >>> words = re.findall(r'w+', open('hamlet.txt').read().lower()) >>> Counter(words).most_common(10) [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631), ('you', 554), ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
class
collections.
Counter
([ iterable-or-mapping ] ) - A
Counter
是dict
用于计算可哈希对象的子类。它是一个集合,其中元素存储为字典键,它们的计数存储为字典值。计数允许为任何整数值,包括零或负计数。该Counter
班是类似于其他语言包或者多集。元素从可迭代计数或从另一个映射(或计数器)初始化 :
>>> 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 args
计数器对象具有字典界面,除了它们为缺少的项返回零计数而不是提出
KeyError
:>>> c = Counter(['eggs', 'ham']) >>> c['bacon'] # count of a missing element is zero 0
将计数设置为零不会从计数器中删除元素。用于
del
完全删除它:3.1版中的新功能。
Counter对象支持除所有字典可用的方法之外的三种方法:
elements
()- 在元素上返回一个迭代器,重复每个元素的次数。元素以任意顺序返回。如果元素的计数小于1,
elements()
则忽略它。>>> c = Counter(a=4, b=2, c=0, d=-2) >>> sorted(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b']
most_common
([ n ] )- 返回n个最常见元素及其计数的列表,从最常见到最少。如果省略n
None
,则most_common()
返回计数器中的所有元素。具有相同计数的元素是任意排序的:>>> Counter('abracadabra').most_common(3) # doctest: +SKIP [('a', 5), ('r', 2), ('b', 2)]
subtract
([ iterable-or-mapping ] )- 从迭代或从另一个映射 (或计数器)中减去元素。喜欢
dict.update()
但是减去计数而不是替换它们。输入和输出都可以是零或负数。>>> c = Counter(a=4, b=2, c=0, d=-2) >>> d = Counter(a=1, b=2, c=3, d=4) >>> c.subtract(d) >>> c Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
版本3.2中的新功能。
通常的字典方法可用于
Counter
对象,除了两个对于计数器有不同作用的对象。fromkeys
(可迭代的)- 没有为
Counter
对象实现此类方法。
update
([ iterable-or-mapping ] )- 元素从可迭代计数或从另一个 映射(或计数器)添加。喜欢
dict.update()
但添加计数而不是替换它们。此外,期望迭代是元素序列,而不是对序列。(key, value)
使用Counter
对象的常见模式:
sum(c.values()) # total of all counts c.clear() # reset all counts list(c) # list unique elements set(c) # convert to a set dict(c) # convert to a regular dictionary c.items() # convert to a list of (elem, cnt) pairs Counter(dict(list_of_pairs)) # convert from a list of (elem, cnt) pairs c.most_common()[:-n-1:-1] # n least common elements +c # remove zero and negative counts
提供了几种数学运算来组合Counter
对象以产生多重集(计数大于零的计数器)。加法和减法通过添加或减去相应元素的计数来组合计数器。交点和并集返回相应计数的最小值和最大值。每个操作都可以接受带有符号计数的输入,但输出将排除计数为零或更少的结果。
>>> c = Counter(a=3, b=1) >>> d = Counter(a=1, b=2) >>> c + d # add two counters together: c[x] + d[x] Counter({'a': 4, 'b': 3}) >>> c - d # subtract (keeping only positive counts) Counter({'a': 2}) >>> c & d # intersection: min(c[x], d[x]) # doctest: +SKIP Counter({'a': 1, 'b': 1}) >>> c | d # union: max(c[x], d[x]) Counter({'a': 3, 'b': 2})
一元加法和减法是用于添加空计数器或从空计数器中减去的快捷方式。
>>> c = Counter(a=2, b=-4) >>> +c Counter({'a': 2}) >>> -c Counter({'b': 4})
版本3.3中的新功能:添加了对一元加,一元减号和就地多重操作的支持。
注意
计数器主要用于处理正整数以表示运行计数; 但是,注意不要不必要地排除需要其他类型或负值的用例。为帮助处理这些用例,本节介绍了最小范围和类型限制。
- 在
Counter
类本身是一本字典的子类,在其键和值没有任何限制。这些值旨在表示计数,但您可以在值字段中存储任何内容。 - 该
most_common()
方法仅需要可订购的值。 - 对于就地操作,例如,值类型只需要支持加法和减法。因此,分数,浮点数和小数将起作用,并支持负值。同样也是如此 ,并允许负和用于输入和输出的零个值。
c[key] += 1
update()
subtract()
- multiset方法仅适用于具有正值的用例。输入可以是负数或零,但仅创建具有正值的输出。没有类型限制,但值类型需要支持加法,减法和比较。
- 该
elements()
方法需要整数计数。它忽略了零和负数。
也可以看看
-
Smalltalk中的Bag类。
-
维基百科的Multisets条目。
-
带有示例的C ++多线程教程。
-
有关多集合及其用例的数学运算,请参阅 Knuth,Donald。。
-
要枚举给定元素集上给定大小的所有不同多重集,请参阅
itertools.combinations_with_replacement()
:map(Counter, combinations_with_replacement('ABC', 2)) # --> AA AB AC BB BC CC
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。