当前位置: 首页 > news >正文

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

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

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

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

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

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

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

例如:

from collections import Counter words = ["apple", "banana", "apple", "orange", "banana", "apple"]counter = Counter(words)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:从列表创建

from collections import Counter data = ["a", "b", "a", "c", "b", "a"]counter = Counter(data)print(counter)

输出:

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

示例 2:从字符串创建

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

text = "hello world"counter = Counter(text)print(counter)

输出示例:

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

示例 3:从字典创建

counter = Counter({"apple": 3, "banana": 2})print(counter)

输出:

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

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

counter = Counter(a=3, b=2, c=1)print(counter)

输出:

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

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

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

二、访问计数结果

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

counter[element]

获取元素计数。

示例:

counter = Counter(["apple", "banana", "apple"]) print(counter["apple"])# 2

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

print(counter["orange"])# 0

这一点与普通字典不同。

elements()

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

counter.elements()

示例:

counter = Counter({"a": 3, "b": 2})print(list(counter.elements()))

输出:

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

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

三、更新与修改计数

+Counter

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

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

示例:

counter = Counter({'a': 2, 'b': 0, 'c': -1})print(+counter)

输出:

Counter({'a': 2})

update()

增加元素计数。

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

参数说明:

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

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

示例:

counter = Counter("apple")counter.update("apple")print(counter)

输出:

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

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

subtract()

减少元素计数。

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

参数说明:

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

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

示例 1:

counter = Counter("apple")counter.subtract("ap")print(counter)

输出:

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

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

示例 2:

c = Counter(a=4, b=2)c.subtract(a=1, b=2)print(c)

输出:

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

四、常用统计函数

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

most_common()

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

counter.most_common(n=None)

参数说明:

• n:返回前 n 个元素

返回:

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

示例:

text = "banana"counter = Counter(text)print(counter.most_common(2))

输出:

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

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

total()

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

counter.total()

示例:

counter = Counter("banana")print(counter.total())# 6

说明:Python 3.10 新增。

五、Counter 的数学运算

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

1、加法

counter1 + counter2

合并计数。

示例:

c1 = Counter("apple")c2 = Counter("pear") print(c1 + c2)# Counter({'p': 3, 'a': 2, 'e': 2, 'l': 1, 'r': 1})

2、减法

counter1 - counter2

只保留大于 0 的计数项。

示例:

print(c1 - c2)# Counter({'p': 1, 'l': 1})

3、交集

counter1 & counter2

取最小计数。

示例:

print(c1 & c2)# Counter({'a': 1, 'p': 1, 'e': 1})

4、并集

counter1 | counter2

取最大计数。

示例:

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

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

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

典型流程包括:

1、文本清洗

2、分词(tokenization)

3、停用词过滤

4、词频统计

示例代码:

from collections import Counterimport string text = """Artificial intelligence is transforming the world.Machine learning and deep learning are key technologies in AI.Natural language processing enables computers to understand human language.""" # 转为小写text = text.lower() # 常见特殊符号punctuation = string.punctuation # 将特殊符号替换为空格table = str.maketrans(punctuation, " " * len(punctuation))text = text.translate(table) # 按空格分词words = text.split() # 使用 Counter 统计词频freq = Counter(words) # 逐行输出出现频率最高的 10 个词for word, count in freq.most_common(10): print(word, count)

📘 小结

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

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/460987/

相关文章:

  • 华为OD机考双机位C卷 - 单核CPU任务调度 (Java)
  • 2026精选除醛药剂厂家/除味药剂厂家:宁波极微纳,用专业打造品质 - 栗子测评
  • 2026年湖北地区耐用翻板车库门平台综合选购指南 - 2026年企业推荐榜
  • 华为OD机考双机位C卷 - 卡牌游戏 (Java)
  • 2026年化肥销售厂家深度盘点:如何选择靠谱的合作伙伴? - 2026年企业推荐榜
  • 2026铝溶胶厂家/拟薄水铝石厂家推荐:精选宁波极微纳领衔 - 栗子测评
  • 2026年伸缩门选购指南:知名品牌与服务商综合推荐 - 2026年企业推荐榜
  • # MAUI 跨平台开发新范式:用 .NET 6+ 实现原生体验与高效调试的完美平衡在移动应用开发领域,
  • 2026年武汉会议租车公司推荐,这5家口碑最佳 - 2026年企业推荐榜
  • **Zephyr 系统下嵌入式开发实战:从驱动到应用层的完整流程设计与代码实现**在物联网快速发展的今
  • 益阳短视频运营服务团队深度评测:2026年初至今口碑推荐榜单 - 2026年企业推荐榜
  • 2026年Q1湘潭短视频运营公司盘点与联系指南 - 2026年企业推荐榜
  • 2026年初宁夏AI推广市场:五大服务商深度剖析与可靠之选 - 2026年企业推荐榜
  • 服务提供商被黑 爱立信美国公司数据遭泄露
  • **状态通道实战:用Solidity实现高效链下交易的去中心化金融架构**在以太坊生态中,**状态通道
  • 基于BS的企业财务管理信息系统的设计与实现 计算机软件毕业设计
  • 20260310紫题训练
  • 2026年Q1汽车陪练服务商综合评测与可靠推荐 - 2026年企业推荐榜
  • 基于SpringBoot+Vue的数据可视化电商系统 计算机软件毕业设计
  • 南陈(557 年 —589 年)历史脉络
  • 2026年AI咨询外包服务商综合评测与选型权威指南 - 2026年企业推荐榜
  • 基于SpringBoot+Vue的游戏交易系统设计与实现 计算机软件毕业设计
  • 2026年湖北卷闸门选购指南:五大口碑品牌深度解析 - 2026年企业推荐榜
  • Flutter 三方库 jolt 的鸿蒙化适配指南 - 实现具备响应式注入与全局主题驱动的极致应用开发框架、支持端侧多端协作与语义化 UI 协议实战
  • 基于SpringBoot+Vue的知识产权管理系统设计与实现 计算机软件毕业设计
  • 2026三元乙丙密封条厂家+橡胶密封条厂家+门窗密封条厂家+门窗胶条生产厂家+防火阻燃密封条厂家:新合星塑胶制品领衔 - 栗子测评
  • 2026高压电源实力厂家推荐:杭州精日科技匠心打造 - 栗子测评
  • 杭州劳务外包公司哪家好?2026杭州靠谱的人力资源公司+杭州专业劳务外包公司+杭州劳务派遣公司推荐:杭州卡费诺企业服务领 - 栗子测评
  • 2026年评价高的环保板材品牌推荐:无醛环保板材公司选择指南 - 品牌宣传支持者
  • 2026年湖北吊钩AI监测如何选?深度解析微特技术硬实力 - 2026年企业推荐榜