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

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.

相关推荐
热点推荐
NIP直落三局强势横扫JDG!离开了TES,我们都有好的结果!

NIP直落三局强势横扫JDG!离开了TES,我们都有好的结果!

囧王者
2026-09-05 22:08:45
恭喜火箭队!3位核心齐聚洛杉矶合练,申京KD同场竞技,打破不和传闻

恭喜火箭队!3位核心齐聚洛杉矶合练,申京KD同场竞技,打破不和传闻

熊哥爱篮球
2026-09-06 09:11:52
太戳心!新星盼梅西踢到50岁,梦想同袍却等来偶像国家队谢幕

太戳心!新星盼梅西踢到50岁,梦想同袍却等来偶像国家队谢幕

圣西罗的太阳
2026-09-06 08:42:53
37岁吴曦入选亚运名单引质疑,真实原因曝光

37岁吴曦入选亚运名单引质疑,真实原因曝光

徽派体育
2026-09-05 21:25:41
歼16刚刚动身回国,俄方立即派苏57去埃及阻击:这一场他们输不起

歼16刚刚动身回国,俄方立即派苏57去埃及阻击:这一场他们输不起

铁锤侃侃而谈
2026-09-05 10:59:23
央视年代剧又出黑马!开播3集全国收视第一,刘琳让观众成功入坑

央视年代剧又出黑马!开播3集全国收视第一,刘琳让观众成功入坑

兵鉴史
2026-09-06 08:31:51
新能源汽车动力电池将迎“退役潮”,废旧电池何去何从

新能源汽车动力电池将迎“退役潮”,废旧电池何去何从

澎湃新闻
2026-09-06 08:26:39
易建联为妻儿建的洛杉矶豪宅烧成灰,如今2000平空地估价曝光,数字让人意外,中介爆出实情

易建联为妻儿建的洛杉矶豪宅烧成灰,如今2000平空地估价曝光,数字让人意外,中介爆出实情

LULU生活家
2026-08-31 15:33:38
无底线了!内塔尼亚胡之子被伊朗特工暗杀,弃行李连夜逃回以色列

无底线了!内塔尼亚胡之子被伊朗特工暗杀,弃行李连夜逃回以色列

梦史
2026-08-29 06:21:20
郑智暴怒!鼓掌嘲讽主裁判,4分钟两球被吹,戴维森世界波无效

郑智暴怒!鼓掌嘲讽主裁判,4分钟两球被吹,戴维森世界波无效

奥拜尔
2026-09-05 20:43:39
大开眼界!许家印当年奢靡生活曝光

大开眼界!许家印当年奢靡生活曝光

麦杰逊
2026-08-23 15:09:25
刚回英国就提要求?梅根开口就要9居室,哈里也有1个要求

刚回英国就提要求?梅根开口就要9居室,哈里也有1个要求

阿废冷眼观察所
2026-09-06 03:41:16
曾泽生率部起义后妻子李律声和三个孩子被抓,蒋介石下令严加处置,滇军同乡调动重兵强行劫狱

曾泽生率部起义后妻子李律声和三个孩子被抓,蒋介石下令严加处置,滇军同乡调动重兵强行劫狱

磊子讲史
2026-09-02 14:09:42
被困尼泊尔水电站隧道超10天,中国公民陆海涛获救,堂妹:曾在建筑工地打工,后前往尼泊尔工作,感谢救援人员没有放弃寻找

被困尼泊尔水电站隧道超10天,中国公民陆海涛获救,堂妹:曾在建筑工地打工,后前往尼泊尔工作,感谢救援人员没有放弃寻找

大风新闻
2026-09-06 09:39:39
打奉陪到底,上合10国签字,人民日报搬出敌国条款,日本怕啥来啥

打奉陪到底,上合10国签字,人民日报搬出敌国条款,日本怕啥来啥

铁锤侃侃而谈
2026-09-05 10:57:08
萨里:如果罗马继续这样的表现,冠军争夺将会一直持续到最后

萨里:如果罗马继续这样的表现,冠军争夺将会一直持续到最后

懂球帝
2026-09-06 09:38:08
泽连斯基:即刻起至9月7日停止袭击莫斯科;俄总统助理:普京与美总统特使会见超3小时,内容充实且“具有建设性”

泽连斯基:即刻起至9月7日停止袭击莫斯科;俄总统助理:普京与美总统特使会见超3小时,内容充实且“具有建设性”

鲁中晨报
2026-09-06 08:07:02
如果当年不搞计划生育,今天的中国会有20亿人吗?

如果当年不搞计划生育,今天的中国会有20亿人吗?

贱议你读史
2026-09-05 02:12:31
如果新生儿跌破700万,三年后幼儿园可能会迎来多大关停潮?

如果新生儿跌破700万,三年后幼儿园可能会迎来多大关停潮?

阿淫记录生活日常
2026-09-05 08:55:50
情侣在瑞士雪山顶“撒欢”,就这么被全世界直播了···

情侣在瑞士雪山顶“撒欢”,就这么被全世界直播了···

新欧洲
2026-04-21 19:37:05
2026-09-06 10:11:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2137文章数 86关注度
往期回顾 全部

科技要闻

DeepSeek被曝将采购16万颗华为昇腾950DT

头条要闻

大桥步道桥板脱落致行人坠亡 当地:断裂风险不好察觉

头条要闻

大桥步道桥板脱落致行人坠亡 当地:断裂风险不好察觉

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

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

态度原创

亲子
手机
健康
游戏
公开课

亲子要闻

揪心一幕:幼儿园开学,孩子哭闹、甚至逃跑,家长不舍地扒墙观望

手机要闻

三星Quick Measure快速测量App将于12月31日结束官方支持

脑梗取栓成功≠活下来,还有这三关

Switch 2大量机器突然被封!原因不明

公开课

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

无障碍浏览 进入关怀版