collections.Counter 用法

原文档连接

简介

计数器是用于计数可哈希对象的dict子类。它是一个集合,其中元素存储为字典键,其计数存储为字典值。计数可以是任何整数值,包括零或负计数。

元素是从一个可迭代的对象计数或从另一个映射(或计数器)初始化的

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

Counter对象具有一个字典接口,当访问不存在的值时,它为缺失项返回0计数,而字典会引发KeyError(因为访问了字典中不存在的键)

c = Counter(['eggs', 'ham'])
c['bacon']                              # count of a missing element is zero

将计数设置为零不会将元素从计数器中删除。使用del将其完全删除:

c['sausage'] = 0                        # counter entry with a zero count
del c['sausage']                        # del actually removes the entry

作为dict的子类,Counter继承了记住插入顺序的功能。对Counter对象的数学运算也保留顺序。根据在左操作数中首先遇到元素的时间,然后按照在右操作数中遇到的顺序,对结果进行排序。

方法

字典方法

常用的词典方法可用于Counter对象,但有两种方法对Counter的工作方式不同。

  • fromkeys(iterable)
    没有为Counter对象实现此类方法。
  • update([iterable-or-mapping])
    元素是从可迭代的或从另一个映射(或计数器)添加的元素中计数的。像dict.update()一样,但是添加计数而不是替换它们。同样,可迭代对象应该是元素序列,而不是(key,value)对序列。(在某种层面上,可以理解为加法运算)

特殊方法

除了适用于所有词典的方法外,Counter对象还支持三种方法:

elements()

在元素上返回一个迭代器,并重复与其计数相等的次数。元素按首先遇到的顺序返回。如果一个元素的数量少于一个,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)
# 结果
# [('a', 5), ('b', 2), ('r', 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})

算术运算

下面四个算术运算结果只含有计数为正的项,否则就是一个空Counter()对象。subtract()和update()方法则没有这些特质。

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]) 
# 结果: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})

注意

Counter()主要用于与正整数一起表示运行计数。但是,请注意不要不必要地排除需要其他类型或负值的用例。为了帮助解决这些用例,本节介绍了最小范围和类型限制。

  • Counter类本身是一个字典子类,对其键和值没有限制。这些值旨在为代表计数的数字,但是您可以在值字段中存储任何内容。
  • most_common()方法仅要求值是可排序的。 对于原地操作,例如c [key] + = 1,值类型仅需要支持加法和减法。因此,分数、浮点数和小数将起作用,并且支持负值。update()subtract()也是如此,它们允许输入和输出均为负值和零值。
  • 多重集方法仅设计用于具有正值的用例。输入可以为负或零,但仅创建具有正值的输出。没有类型限制,但是值类型需要支持加,减和比较。
  • elements()方法需要整数计数。它忽略零和负计数。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值