网易首页 > 网易号 > 正文 申请入驻

Python:collections.Counter 常用函数及应用

0
分享至

在文本分析、数据统计以及自然语言处理中,经常需要对数据进行频次统计(frequency counting)。例如:

• 统计一段文本中每个单词出现的次数

• 统计日志中某类事件出现的频率

• 统计列表中元素的重复情况

Python 标准库 collections 提供了一个专门用于频次统计的数据结构:Counter。

Counter 是一个计数器对象,本质上实现了多重集合(multiset)的行为,用于记录元素出现的次数。

例如:

print(counter)

输出示例:

Counter({'apple': 3, 'banana': 2, 'orange': 1})

• 键(key):表示被统计的元素

• 值(value):表示该元素出现的次数(计数)

Counter 基于字典实现,底层使用哈希表结构,因此对元素计数的更新与查询通常具有接近 (1) 的时间复杂度。

一、创建 Counter 对象

Counter 可以通过多种方式创建。

Counter()

创建一个 Counter 对象。

Counter([iterable_or_mapping], **kwargs)

参数说明:

• iterable_or_mapping:可迭代对象(如列表、字符串)或映射对象(字典),用于初始化计数

• **kwargs:以关键字参数形式提供元素计数

返回:

返回一个 Counter 对象。若不提供参数,则创建空 Counter。

示例 1:从列表创建

print(counter)

输出:

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

示例 2:从字符串创建

字符串也是可迭代对象,因此可以直接统计字符频率。

print(counter)

输出示例:

Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

示例 3:从字典创建

print(counter)

输出:

Counter({'apple': 3, 'banana': 2})

示例 4:使用关键字参数创建

print(counter)

输出:

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

说明:关键字参数的形式等价于从字典创建:

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

二、访问计数结果

Counter 的行为类似于字典,可以通过键访问元素计数。

counter[element]

获取元素计数。

示例:

# 2

如果元素不存在,Counter 返回 0,而不是抛出异常:

# 0

这一点与普通字典不同。

elements()

返回一个迭代器,其中每个元素按照其计数重复出现。

counter.elements()

示例:

print(list(counter.elements()))

输出:

['a', 'a', 'a', 'b', 'b']

说明:elements() 仅返回计数大于 0 的元素,并按照元素在 Counter 中的顺序生成。

三、更新与修改计数

+Counter

Counter 可通过一元加号运算删除计数小于等于 0 的元素。

+counter 会返回一个新的 Counter 对象,其中只保留计数大于 0 的元素。

示例:

print(+counter)

输出:

Counter({'a': 2})

update()

增加元素计数。

counter.update([iterable_or_mapping], **kwargs)

参数说明:

• iterable_or_mapping:可迭代对象(如列表、字符串)或映射对象(字典)

• **kwargs:以关键字参数形式增加元素计数

示例:

print(counter)

输出:

Counter({'p': 4, 'a': 2, 'l': 2, 'e': 2})

说明:当传入字符串时,字符串会被视为字符序列进行统计。

subtract()

减少元素计数。

counter.subtract([iterable_or_mapping], **kwargs)

参数说明:

• iterable_or_mapping:可迭代对象(如列表、字符串)或映射对象(字典)

• **kwargs:以关键字参数形式减少元素计数

示例 1:

print(counter)

输出:

Counter({'p': 2, 'l': 1, 'e': 1, 'a': 0})

说明:subtract() 可能产生负数计数。

示例 2:

print(c)

输出:

Counter({'a': 3, 'b': 0})

四、常用统计函数

Counter 提供了多个用于统计分析的函数。

most_common()

返回出现频率最高的元素。

counter.most_common(n=None)

参数说明:

• n:返回前 n 个元素

返回:

返回一个列表,每个元素为:(element, count)。

示例:

print(counter.most_common(2))

输出:

[('a', 3), ('n', 2)]

说明:结果按计数从高到低排序;若计数相同,则保持元素首次出现顺序。

total()

返回 Counter 中所有计数值的总和。

counter.total()

示例:

# 6

说明:Python 3.10 新增。

五、Counter 的数学运算

Counter 支持多重集合(multiset)运算。

1、加法

counter1 + counter2

合并计数。

示例:

# Counter({'p': 3, 'a': 2, 'e': 2, 'l': 1, 'r': 1})

2、减法

counter1 - counter2

只保留大于 0 的计数项。

示例:

# Counter({'p': 1, 'l': 1})

3、交集

counter1 & counter2

取最小计数。

示例:

# Counter({'a': 1, 'p': 1, 'e': 1})

4、并集

counter1 | counter2

取最大计数。

示例:

# Counter({'p': 2, 'a': 1, 'l': 1, 'e': 1, 'r': 1})

六、英文文本词频统计示例

在自然语言处理(NLP)任务中,Counter 常用于统计单词频率。

典型流程包括:

1、文本清洗

2、分词(tokenization)

3、停用词过滤

4、词频统计

示例代码:

小结

Counter 是 Python collections 模块提供的计数器对象,本质上是 dict 的子类,用于记录元素出现次数。通过 Counter()、update()、subtract()、most_common()、elements() 等方法,可以方便地完成频次统计与数据分布分析。Counter 还支持多重集合运算,如加法、减法、交集和并集。在文本分析与自然语言处理任务中,Counter 常与分词和文本清洗步骤结合使用,用于快速构建词频统计模型。


点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海一女子不打算结婚,便和一个学历高的长相英俊小伙商量出30万

上海一女子不打算结婚,便和一个学历高的长相英俊小伙商量出30万

王二哥老搞笑
2026-09-06 04:45:33
有人预测:明后年,越来越多人会搬离“住宅”,原因很简单 很现实

有人预测:明后年,越来越多人会搬离“住宅”,原因很简单 很现实

老覃讲历史
2026-09-04 02:56:40
有什么用?热刺6大前锋总转会费2.5亿欧,但球队前3轮0进球

有什么用?热刺6大前锋总转会费2.5亿欧,但球队前3轮0进球

懂球帝
2026-09-06 00:12:18
豪取一波9连胜!高芙两盘横扫过关,连续5年跻身美网16强

豪取一波9连胜!高芙两盘横扫过关,连续5年跻身美网16强

全景体育V
2026-09-06 06:32:04
那五个字,刻在石壁上,印在心坎里

那五个字,刻在石壁上,印在心坎里

新华社
2026-09-04 14:10:36
《醒来》大结局,陈开来被唤醒那天,接头时整个人都僵住了

《醒来》大结局,陈开来被唤醒那天,接头时整个人都僵住了

草莓解说体育
2026-09-06 02:35:32
“睡了等于没睡”再添实锤!最新研究:睡眠越碎片化,大脑“痴呆蛋白”堆积越多,助推阿尔茨海默病;且这一脑区紧绷,中老年睡眠更碎

“睡了等于没睡”再添实锤!最新研究:睡眠越碎片化,大脑“痴呆蛋白”堆积越多,助推阿尔茨海默病;且这一脑区紧绷,中老年睡眠更碎

梅斯医学
2026-09-04 07:55:33
中国驻尼泊尔大使馆向尼方转交中共中央对外联络部提供的20万美元现汇援助,尼方:深表感谢,期待继续得到中方宝贵支持,携手战胜灾情

中国驻尼泊尔大使馆向尼方转交中共中央对外联络部提供的20万美元现汇援助,尼方:深表感谢,期待继续得到中方宝贵支持,携手战胜灾情

政知新媒体
2026-09-05 00:35:49
宏远速递!杜锋爱将自宣离队,新主帅首次表态,徐杰正式发声

宏远速递!杜锋爱将自宣离队,新主帅首次表态,徐杰正式发声

多特体育说
2026-09-05 22:31:30
宋子文晚年选择吐露实情:西安事变护送蒋介石抵南京当日,叛徒并不是张学良,这个名字藏了35年,再不说就要随同自己入土了

宋子文晚年选择吐露实情:西安事变护送蒋介石抵南京当日,叛徒并不是张学良,这个名字藏了35年,再不说就要随同自己入土了

唠叨说历史
2026-08-04 17:10:49
俄媒:俄罗斯建“粉碎大日本帝国”纪念碑,日本急了

俄媒:俄罗斯建“粉碎大日本帝国”纪念碑,日本急了

环球网资讯
2026-09-04 20:58:11
一刀未剪!4个半小时!中国院线史第一部设中场休息的电影来了

一刀未剪!4个半小时!中国院线史第一部设中场休息的电影来了

手工制作阿歼
2026-09-05 12:39:45
泽连斯基宣布停止打击莫斯科

泽连斯基宣布停止打击莫斯科

环球网资讯
2026-09-05 23:07:10
张雪机车遗憾!德比斯首次杆位发车无缘冠军 获第3重新登上领奖台

张雪机车遗憾!德比斯首次杆位发车无缘冠军 获第3重新登上领奖台

念洲
2026-09-05 20:36:44
44万人欠信用卡,银行连官司都懒得打了

44万人欠信用卡,银行连官司都懒得打了

知肇分子
2026-09-04 23:43:57
海航的漂亮空姐,火了!

海航的漂亮空姐,火了!

微微热评
2026-09-05 11:42:23
辞职宏远原因曝光,不甘只当经理,朱芳雨发声,新岗位曝光,陈总后悔了

辞职宏远原因曝光,不甘只当经理,朱芳雨发声,新岗位曝光,陈总后悔了

有态度网友19HJkf
2026-09-05 18:53:17
中国女篮惨败美国仅1天,不对劲的一幕出现,李月汝、李梦被牵连

中国女篮惨败美国仅1天,不对劲的一幕出现,李月汝、李梦被牵连

潋滟晴方DAY
2026-09-05 17:34:56
沉默六天,终于瞒不住了!中方拦截秋刀渔船,日本政府罕见失声

沉默六天,终于瞒不住了!中方拦截秋刀渔船,日本政府罕见失声

策前论
2026-09-05 18:06:36
知名女星赤裸上身 和两个儿子合照,身材火辣,网友:毫无边界感…

知名女星赤裸上身 和两个儿子合照,身材火辣,网友:毫无边界感…

陈意小可爱
2026-09-03 13:10:31
2026-09-06 09:15:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2137文章数 86关注度
往期回顾 全部

科技要闻

华为何庭波,再次更新韬定律论文

头条要闻

牛弹琴:9月初的深圳 干了一件很不寻常的事

头条要闻

牛弹琴:9月初的深圳 干了一件很不寻常的事

体育要闻

本西蒙斯加盟国王,不管怎样,回来就好

娱乐要闻

阿Sa蔡卓妍首度求婚细节,感动落泪

财经要闻

被曝试药后死亡,药企董事竟怒怼记者

汽车要闻

带升降立标MPV 岚图梦想家9预售价42.99万起

态度原创

艺术
时尚
家居
公开课
军事航空

艺术要闻

别再说外星人了!三星堆最新发掘,直接实锤“龙的传人”

金秋最流行的鞋子,“红色”更时髦!

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

俄罗斯建"粉碎大日本帝国"纪念碑 日本急了

无障碍浏览 进入关怀版