Counter是dict字典的子类,Counter拥有类似字典的key键和value值,只不过Counter的键为待计数的元素,而value值为对应元素出现的次数count,虽然Counter中的count表示的计数,但是count的值允许为0或负值。
从string、list和tuple这些可迭代对象中获取元素
# 从可迭代对象中实例化 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})
从 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': 2, 'b': 2}) #字典中的键是唯一的,因此如果字典中的键重复会保留最后一个
c['d']表示的查找返回元素值为d的 count 计数,而如果使用c['d'] = 0则表示的是为 Counter 添加元素。
from collections import Counter
c = Counter({'a':1, 'b':2, 'c':3})
>>> print(c['d']) # 查找键值为'd'对应的计数
0
c['d'] = 4 # 为 Counter 添加元素
>>> print(c['d'])
4
>>> print(c)
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
Counter中特有的方法elements()、most_common([m])、substract([iterable_or_mapping])
elements 方法
elements()方法返回一个迭代器,可以通过 list 或者其它方法将迭代器中的元素输出,输出的结果为对应出现次数的元素。
from collections import Counter
c = Counter({'a':1, 'b':2, 'c':3})
c2 = Counter({'a':0, 'b':-1, 'c':3}) # 将出现次数设置为 0 和负值
>>> print(c.elements())
<itertools.chain object at 0x0000022A57509B70>
>>> print(list(c.elements()))
['a', 'b', 'b', 'c', 'c', 'c']
>>> print(c2.elements())
<itertools.chain object at 0x0000022A57509B70>
>>> print(list(c2.elements()))
['c', 'c', 'c']
在 Counter 中是允许计数为 0 或者负值的,不过通过上面代码可以看出 elements 函数没有将 0 和负值对应的元素值打印出来。
most_common 方法
most_common([n])是 Counter 最常用的方法,返回一个出现次数从大到小的前 n 个元素的列表。
from collections import Counter
c = Counter({'a':1, 'b':2, 'c':3})
>>> print(c.most_common()) # 默认参数
[('c', 3), ('b', 2), ('a', 1)]
>>> print(c.most_common(2)) # n = 2
[('c', 3), ('b', 2)]
>>> print(c.most_common(3)) # n = 3
[('c', 3), ('b', 2), ('a', 1)]
>>> print(c.most_common(-1)) # n = -1
[]
subtract 方法
subtract([iterable_or_mapping])方法其实就是将两个 Counter 对象中的元素对应的计数相减。
from collections import Counter
c = Counter({'a':1, 'b':2, 'c':3})
d = Counter({'a':1, 'b':3, 'c':2, 'd':2})
c.subtract(d)
>>> print(c)
Counter({'c': 1, 'a': 0, 'b': -1, 'd': -2})
网友评论