Python中的Counter
Counter 的用处
提供一种简洁的计数方法。
Counter 的 Import
from collections import Counter
Collections是一个集成了List、Dict、Purple、Set的拓展和替代品的模块。

Counter
Counter是dict的子类,因此也像dict一样具有键和值,其中键表示元素,值表示元素出现的次数。
初始化
可以直接初始化,也可以从iterable 型,map 型或者keyword args 型中初始化。
c = Counter() # a new, empty counter
c = Counter('gallahad') # a new counter from an iterable,即统计'gallahad'中各元素出现次数
c = Counter({'red': 4, 'blue': 2}) # a new counter from a mapping,见elements方法
c = Counter(cats=4, dogs=8) # a new counter from keyword args,见elements方法
初始化之后,可以按照字典的方式查询每个元素出现的次数。例如,用一个列表初始化Counter
c = Counter(['a','b','c','v','s', 'a'])
c['a']
输出结果为 2 ,如果要统计的元素不存在,那么返回的值是0,而不会像字典一样报错。如:
c = Counter(['a','b','c','v','s', 'a'])
c['d']
输出结果为0。
注意,和字典赋值一样,Counter也可以令某一个元素计数值为0,但并不会从Counter里将其删去。更进一步,这也说明Counter的值(计数值)可以为0甚至负数。
要想删去某个元素,应使用del c['某元素']
,其中c是Counter实例。
附加方法
除了继承dict的一些方法外,Counter有一些附加方法
elements()
返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于一,elements() 将会忽略它。
例如:
c = Counter(cats=4, dogs=8)
for i in c.elements():
print(i, end=' ')
输出结果是 cats cats cats cats dogs dogs dogs dogs dogs dogs dogs dogs
most_common([n])
返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 返回计数器中的所有元素。计数值相等的元素按首次出现的顺序排序。
例如:
c = Counter('gallahad')
print(c.most_common())
结果:[('a', 3), ('l', 2), ('g', 1), ('h', 1), ('d', 1)]
total()
总的计数值。大部分场景下相当于len
c = Counter(a=10, b=5, c=0)
c.total()
输出15
注意:这是3.10出才出现的用法!
其余一些常见操作
c.total() # 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
一些数学计算
加法和减法运算是通过增加或减少相应元素的计数值来合并计数器。
交集和并集运算是返回相应计数的最小值和最大值。 相等和包括运算是对相应计数进行比较。
每种运算都可接受带符号计数的输入,但输出将排除计数为零或小于零的结果。
单目加和减(一元操作符)意思是从空计数器加或者减去。
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 == d # equality: c[x] == d[x] 返回 False
c <= d # inclusion: c[x] <= d[x] 返回 False
+c # 返回 Counter({'a': 3, 'b': 1})(可利用这个消去Counter中的计数值为0或负的元素)
-c # 返回 Counter()
参考
posted on 2022-12-27 16:23 VicoZhang 阅读(1086) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了