目录
介绍
Counter是dict的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数。
创建
Counter
([iterable-or-mapping]),可迭代的或映射的可哈希对象都可以
>>> from collections import Counter
>>> Counter()
Counter()
>>> Counter('lady_killer9')
Counter({'l': 3, 'a': 1, 'd': 1, 'y': 1, '_': 1, 'k': 1, 'i': 1, 'e': 1, 'r': 1, '9': 1})
>>> Counter({'res':4,'blue':2})
Counter({'res': 4, 'blue': 2})
>>> Counter(cats=4,dogs=6)
Counter({'dogs': 6, 'cats': 4})
列表也是可以的
>>> Counter([7,7,8,9])
Counter({7: 2, 8: 1, 9: 1})
操作符
求并集 +
>>> Counter([1,2,3,4])+Counter([3,4,5,6])
Counter({3: 2, 4: 2, 1: 1, 2: 1, 5: 1, 6: 1})
不保持计数使用操作符|,因为我们使用这个数据结构就是计数方便,所以几乎并不用,也提一下吧
>>> Counter([1,2,3,4]) | Counter([3,4,5,6])
Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})
求交集 &
>>> Counter([1,2,3,4]) & Counter([2,3,5])
Counter({2: 1, 3: 1})
求差集 -
>>> Counter([1,2,3,4]) - Counter([2,3,5])
Counter({1: 1, 4: 1})
方法
返回元素迭代器
elements
返回一个迭代器,每个元素重复计数的个数。元素顺序是任意的。
>>> Counter(a=2,b=3,c=0)
Counter({'b': 3, 'a': 2, 'c': 0})
返回高频元素
most_common
([n])
返回一个列表,提供 n 个频率最高的元素和计数。 如果没提供 n ,或者是 None
,返回计数器中的所有元素。相等个数的元素顺序随机。
>>> c = Counter('lady_killer9')
>>> c
Counter({'l': 3, 'a': 1, 'd': 1, 'y': 1, '_': 1, 'k': 1, 'i': 1, 'e': 1, 'r': 1, '9': 1})
>>> c.most_common(1)
[('l', 3)]
视图
和字典一样
>>> c.keys()
dict_keys(['l', 'a', 'd', 'y', '_', 'k', 'i', 'e', 'r', '9'])
>>> c.values()
dict_values([3, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> c.items()
dict_items([('l', 3), ('a', 1), ('d', 1), ('y', 1), ('_', 1), ('k', 1), ('i', 1), ('e', 1), ('r', 1), ('9', 1)])
求差集
subtract
([iterable-or-mapping]),强烈建议使用操作符-,可看函数后面的注意。
>>> c = Counter([1,2,3,4])
>>> d = Counter([2,3,5])
>>> c.subtract(d)
>>> c
Counter({1: 1, 4: 1, 2: 0, 3: 0, 5: -1})
函数
c同上
转列表
>>> list(c)
[1, 2, 3, 4, 5]
长度
>>> len(c)
5
注意,如果不想要0和负数,在原本没有0和负数的情况下,使用操作符-来获得差集
>>> Counter([1,2,3,4])-Counter([3,4,5])
Counter({1: 1, 2: 1})
>>> list(Counter([1,2,3,4])-Counter([3,4,5]))
[1, 2]
参考
练习: