Python技巧:collection库中Counter方法的使用

Overview— Counter:计数器

counter是对字典类型的补充,用于追踪值出现的次数,具备字典的所有功能+自己的功能

Counter 是 dict 字典的子类,Counter 拥有类似字典的 key 键和 value 值,只不过 Counter 中的键为待计数的元素,而 value 值为对应元素出现的次数 count,为了方便介绍统一使用元素和 count 计数来表示。虽然 Counter 中的 count 表示的是计数,但是 Counter 允许 count 的值为 0 或者负值。

from collections import Counter
c = Counter(['蔡', '潘', '许', '潘', '宋', '郭', '王', '姚', '汪', '方', '任', '李', '邵', '赵', '柳', '陈', '滕', '沈', '刘', '叶', '王', '张', '管', '邱', '童', '姚', '张', '徐', '韩', '王', '钱', '杨', '李', '张', '陈', '郑', '李', '吴', '邵', '王'])
c2 = Counter("fhasdufhefbadfa")
print c
print c2
 
 
# 结果如下
Counter({'王': 4, '李': 3, '张': 3, '潘': 2, '姚': 2, '邵': 2, '陈': 2, '蔡': 1, '许': 1, '宋': 1, '郭': 1, '汪': 1, '方': 1, '任': 1, '赵': 1, '柳': 1, '滕': 1, '沈': 1, '刘': 1, '叶': 1, '管': 1, '邱': 1, '童': 1, '徐': 1, '韩': 1, '钱': 1, '杨': 1, '郑': 1, '吴': 1})
Counter({'f': 4, 'a': 3, 'h': 2, 'd': 2, 's': 1, 'u': 1, 'e': 1, 'b': 1})

Details

参考资料:https://zhuanlan.zhihu.com/p/355601478

1. 实例化 Counter 类

  1. 如果要使用 Counter,必须要进行实例化,在实例化的同时可以为构造函数传入参数来指定不同类型的元素来源。
from collections import Counter

# 实例化元素为空的 Counter 对象
a = Counter()

# 从可迭代对象中实例化 Counter 对象
b = Counter('chenkc')

# 从 mapping 中实例化 Counter 对象
c = Counter({'a':1, 'b':2, 'c':3})

# 从关键词参数中实例化 Counter 对象
d = Counter(a = 1, b = 2, c = 3)
  1. 实例化元素为空的 Counter 对象,之后可以通过为字典添加元素的方式为 Counter 对象添加元素。
from collections import Counter

# 实例化元素为空的 Counter
a = Counter()
# 为 Counter 添加元素以及对应的 count 计数
a['a'] = 1
a['b'] = 2
a['c'] = 3

>>> print(a)
Counter({'c': 3, 'b': 2, 'a': 1})
  1. 从 string(字符为list列表的元素)、list 和 tuple 这些可迭代对象中获取元素。
from collections import Counter

# 从可迭代对象中实例化 Counter
b = Counter("chenkc") # string
b2 = Counter(['c', 'h', 'e', 'n', 'k', 'c']) # list
b3 = Counter(('c', 'h', 'e', 'n', 'k', 'c')) # tuple

>>> print(b)
Counter({'c': 2, 'h': 1, 'e': 1, 'n': 1, 'k': 1})
>>> print(b2)
Counter({'c': 2, 'h': 1, 'e': 1, 'n': 1, 'k': 1})
>>> print(b3)
Counter({'c': 2, 'h': 1, 'e': 1, 'n': 1, 'k': 1})
  1. 从 mapping 中实例化 Counter 对象,mapping 类型的数据就是元素为(x, y)的列表,字典也属于 mapping 类型的数据。
from collections import Counter

# 从 mapping 中实例化 Counter 对象
c = Counter([('a', 1), ('b', 2), ('a', 3), ('c', 3)])
c2 = Counter({'a':1, 'b':2, 'a':3, 'c':3}) # 字典

>>> print(c)
Counter({('a', 1): 1, ('b', 2): 1, ('a', 3): 1, ('c', 3): 1}) 
>>> print(c2)
Counter({'a': 3, 'c': 3, 'b': 2})
  1. 虽然传入的 mapping 类型的数据是一样的,但是由于字典中的键是唯一的,因此如果字典中的键重复会保留最后一个。
dic = {'a':1, 'b':2, 'a':3, 'c':3}

>>> print(dic)
{'a': 3, 'b': 2, 'c': 3}
  1. 从关键词参数中实例化 Counter 对象,关键词参数中指定的关键词必须是唯一的,但是不同于字典,如果指定的关键词重复,程序会抛出SyntaxError异常。
from collections import Counter

# 从关键词参数中实例化 Counter 对象
d = Counter(a = 1, b = 2, c = 3)
# d2 = Counter(a = 1, b = 2, a = 3, c = 3) # SyntaxError

>>> print(d)
Counter({'c': 3, 'b': 2, 'a': 1})
  1. 我们都知道在字典中查找不存在的键,程序会抛出 KyeError的异常,但是由于 Counter 用于统计计数,因此 Counter 不同于字典,**如果在 Counter 中查找一个不存在的元素,不会产生异常,而是会返回 0,这其实很好理解,Counter 计数将不存在元素的 count 值设置为 0 **。
from collections import Counter

c = Counter({'a':1, 'b':2, 'c':3})

>>> print(c['d']) # 查找键值为'd'对应的计数
0
>>> print(c)
Counter({'c': 3, 'b': 2, 'a': 1})
  1. c[‘d’]表示的查找返回元素值为d的 count 计数,而如果使用c[‘d’] = 0则表示的是为 Counter 添加元素。
from collections import Counter

c = Counter({'a':1, 'b':2, 'c':3})
c['d'] = 4 # 为 Counter 添加元素

>>> print(c['d'])
4
>>> print(c)
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})

2. Counter 中的方法

参考资料:https://zhuanlan.zhihu.com/p/355601478

2.1 Counter 特有的方法

2.2 Counter 支持的字典方法

2.3 集合运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值