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

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.

相关推荐
热点推荐
莫迪最新涉华表态

莫迪最新涉华表态

政知新媒体
2026-06-24 08:35:06
美参议院通过决议要求特朗普结束对伊朗战事

美参议院通过决议要求特朗普结束对伊朗战事

新华社
2026-06-24 09:20:03
大龄熟男!勇士用首轮11顺位选中来自密歇根大学的伦德博格

大龄熟男!勇士用首轮11顺位选中来自密歇根大学的伦德博格

懂球帝
2026-06-24 09:21:21
官方:德尚因母亲去世将回国奔丧,不会现场指挥与挪威比赛

官方:德尚因母亲去世将回国奔丧,不会现场指挥与挪威比赛

懂球帝
2026-06-24 04:36:30
黄植诚婚后妻子赴美失联,宅院连夜查封,屋内究竟搜到何物

黄植诚婚后妻子赴美失联,宅院连夜查封,屋内究竟搜到何物

磊子讲史
2026-06-23 12:00:56
谈了18个小时!终于迎来结果,伊朗代表当场破防,全程咬牙没离场

谈了18个小时!终于迎来结果,伊朗代表当场破防,全程咬牙没离场

流史岁月
2026-06-23 20:05:05
夺冠热门轰然倒下,闭眼踢都能出线,却有可能出局,扩军救了他们

夺冠热门轰然倒下,闭眼踢都能出线,却有可能出局,扩军救了他们

我就是一个说球的
2026-06-23 21:47:23
成本近3亿,总票房仅6000多万,韩红喊话:能不能给冯小刚走个面

成本近3亿,总票房仅6000多万,韩红喊话:能不能给冯小刚走个面

星宿影视鸭
2026-06-23 11:58:28
1岁半男童被生父女友踢死,事发1个月后生父出具谅解书,孩子爷爷发声:不想认这个儿子,“每次和孙子视频,他都在哭”

1岁半男童被生父女友踢死,事发1个月后生父出具谅解书,孩子爷爷发声:不想认这个儿子,“每次和孙子视频,他都在哭”

都市快报橙柿互动
2026-06-24 02:30:24
大反转!顺德渔村驱赶母子避雨后续:监控视频公布,宝妈骗了全网

大反转!顺德渔村驱赶母子避雨后续:监控视频公布,宝妈骗了全网

李晚书
2026-06-23 09:56:58
C罗多项数据压倒梅西,若能世界杯逆袭夺冠,历史地位将后来居上

C罗多项数据压倒梅西,若能世界杯逆袭夺冠,历史地位将后来居上

杨华评论
2026-06-24 05:34:16
交通执法人员被举报“违规收受礼品”,官方通报

交通执法人员被举报“违规收受礼品”,官方通报

澎湃新闻
2026-06-23 23:14:08
5-2领先!比起梅西轰世界杯18球,让他更难追C罗的纪录,还在后面

5-2领先!比起梅西轰世界杯18球,让他更难追C罗的纪录,还在后面

侃球熊弟
2026-06-24 04:29:58
新疆小伙Cos耶稣火出圈!一言不合就戴荆棘冠,连线老外当场懵圈

新疆小伙Cos耶稣火出圈!一言不合就戴荆棘冠,连线老外当场懵圈

大又元
2026-06-23 18:08:03
离谱!成都地铁老头强拽女孩让座殴打孩子母亲,官方发声全网炸锅

离谱!成都地铁老头强拽女孩让座殴打孩子母亲,官方发声全网炸锅

天天热点见闻
2026-06-24 04:39:22
巴斯夫中国退出与中国石油合资公司

巴斯夫中国退出与中国石油合资公司

雷达财经
2026-06-23 15:40:27
爵士榜眼签选天才双能卫彼得森:模板科比 拒选布泽尔之子

爵士榜眼签选天才双能卫彼得森:模板科比 拒选布泽尔之子

醉卧浮生
2026-06-24 08:44:37
迪班萨正式当选状元!获千万年薪大合同 辅佐浓眉和杨冲击季后赛

迪班萨正式当选状元!获千万年薪大合同 辅佐浓眉和杨冲击季后赛

追球者
2026-06-24 08:12:46
为什么我不会看电影《抓特务》?

为什么我不会看电影《抓特务》?

十柱
2026-06-23 16:07:19
泽连斯基高调施压,俄罗斯和白俄罗斯密集回应乌克兰“最后通牒”

泽连斯基高调施压,俄罗斯和白俄罗斯密集回应乌克兰“最后通牒”

环球网资讯
2026-06-24 06:42:09
2026-06-24 09:43:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1899文章数 80关注度
往期回顾 全部

科技要闻

国产超算时隔九年再度登顶全球

头条要闻

牛弹琴:高市早苗遭遇近期最尴尬演讲 但她"没听见"

头条要闻

牛弹琴:高市早苗遭遇近期最尴尬演讲 但她"没听见"

体育要闻

字母哥,会把凯尔特人拆了吗?

娱乐要闻

内娱95后顶流格局发生潜移默化的变化

财经要闻

爆料人:如果我错了,赔偿坐牢都接受

汽车要闻

施鹏泽:为什么奥迪E7X强调座舱气味安全?

态度原创

健康
家居
时尚
数码
房产

同样是中风,急救方向竟完全相反?

家居要闻

绿意盎然 自然之境

被40万人追更的火焰魔术师,重塑古老灯工玻璃

数码要闻

中国扫地机器人5月线上销量TOP10出炉:科沃斯、石头、追觅前三

房产要闻

洞察新局|预算不变 居住升级 2026广州置业成本观察

无障碍浏览 进入关怀版