在文本分析、数据统计以及自然语言处理中,经常需要对数据进行频次统计(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.