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

玩转python:通俗易懂掌握高级数据结构-collections模块之Counter

引言

Counter是Python中collections模块提供的一个强大工具,用于统计可哈希对象的出现次数。它非常适合用于频率统计、词频分析、数据聚合等场景。本文将详细介绍Counter的关键用法和特性,并通过8个丰富的案例帮助读者掌握其应用。


关键用法和特性表格
特性/方法描述
统计频率快速统计可哈希对象的出现次数。
字典子类Counterdict的子类,支持所有字典操作。
初始化使用Counter(iterable)Counter(mapping)创建。
elements()返回一个迭代器,包含所有元素(按出现次数重复)。
most_common(n)返回出现次数最多的n个元素及其计数。
update(iterable)更新计数器,增加元素的计数。
subtract(iterable)更新计数器,减少元素的计数。
算术操作支持加法(+)、减法(-)、交集(&)、并集(|)操作。

1. Counter的概念

Countercollections模块中的一个类,用于统计可哈希对象的出现次数。它的主要特点是:

  • 统计频率:快速统计元素的出现次数。
  • 字典子类:支持所有字典操作,如键值访问、更新等。
  • 高效性能:统计和更新操作的时间复杂度为O(1)。

2. Counter的用法

2.1 创建Counter
from collections import Counter

# 从列表创建Counter
c = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
print(c)  # 输出: Counter({'apple': 3, 'banana': 2, 'orange': 1})

# 从字符串创建Counter
c = Counter('abracadabra')
print(c)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
2.2 访问元素计数
# 访问元素的计数
print(c['a'])  # 输出: 5
print(c['z'])  # 输出: 0(不存在时返回0)
2.3 更新计数器
# 更新计数器
c.update(['a', 'b', 'a'])
print(c)  # 输出: Counter({'a': 7, 'b': 3, 'r': 2, 'c': 1, 'd': 1})

3. Counter的常见方法

3.1 elements():返回所有元素
# 返回所有元素(按计数重复)
print(list(c.elements()))  # 输出: ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'r', 'r', 'c', 'd']
3.2 most_common(n):返回最常见的元素
# 返回最常见的2个元素
print(c.most_common(2))  # 输出: [('a', 7), ('b', 3)]
3.3 subtract(iterable):减少元素计数
# 减少元素计数
c.subtract(['a', 'b', 'a'])
print(c)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
3.4 算术操作
# 加法操作
c1 = Counter(['a', 'b', 'a'])
c2 = Counter(['b', 'c', 'b'])
print(c1 + c2)  # 输出: Counter({'a': 2, 'b': 3, 'c': 1})

# 交集操作
print(c1 & c2)  # 输出: Counter({'b': 1})

4. Counter的8个应用案例

案例1:统计词频
# 统计一段文本的词频
text = "Python is great. Python is easy. Python is powerful."
words = text.split()
word_count = Counter(words)
print(word_count)  # 输出: Counter({'Python': 3, 'is': 3, 'great.': 1, 'easy.': 1, 'powerful.': 1})
案例2:统计字符频率
# 统计字符串中字符的频率
s = "abracadabra"
char_count = Counter(s)
print(char_count)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
案例3:找出最常见的元素
# 找出列表中最常见的元素
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
c = Counter(data)
print(c.most_common(2))  # 输出: [(4, 4), (3, 3)]
案例4:统计文件中的单词频率
# 统计文件中单词的频率
with open('example.txt', 'r') as file:
    words = file.read().split()
    word_count = Counter(words)
    print(word_count.most_common(5))  # 输出文件中出现频率最高的5个单词
案例5:数据聚合
# 统计多个数据集的聚合结果
data1 = ['apple', 'banana', 'apple']
data2 = ['banana', 'orange', 'banana']
c1 = Counter(data1)
c2 = Counter(data2)
combined = c1 + c2
print(combined)  # 输出: Counter({'banana': 3, 'apple': 2, 'orange': 1})
案例6:统计投票结果
# 统计投票结果
votes = ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Alice']
vote_count = Counter(votes)
print(vote_count.most_common(1))  # 输出: [('Alice', 3)]
案例7:统计列表中元素的频率
# 统计列表中元素的频率
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
c = Counter(data)
print(c)  # 输出: Counter({4: 4, 3: 3, 2: 2, 1: 1})
案例8:统计多个计数器的交集
# 统计多个计数器的交集
c1 = Counter(['a', 'b', 'a'])
c2 = Counter(['b', 'c', 'b'])
print(c1 & c2)  # 输出: Counter({'b': 1})

总结

Counter是Python中一个非常实用的工具,能够快速统计元素的出现次数,并支持丰富的操作。通过本文的详细讲解和8个实际案例,读者可以快速掌握Counter的使用方法,并在实际项目中灵活应用。无论是词频统计、数据聚合,还是投票分析,Counter都能轻松应对!

相关文章:

  • 利用委托用户控件、窗体之间传值 c#
  • 响应式编程-基于Reactor模式WebFlux框架的Spring Gateway
  • 生成省市区JSON
  • http 405 Not Allowed
  • 2018年全国职业院校技能大赛-高职组计算机网络应用竞赛竞赛样题A卷
  • 一文讲通锁标记对象std::adopt_lock盲点
  • OpenAI与谷歌DeepMind新品同日竞技,谁能引领机器人现实任务新潮流?
  • C#-委托delegate
  • C++设计模式-观察者模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 网络视频监控平台在医疗领域的应用
  • 浏览器中输入 URL 到显示主页的完整过程
  • 【后端】【django】Django 自带的用户系统与 RBAC 机制
  • 历次科技泡沫对人工智能发展的启示与规避措施
  • containerd 拉取镜像的工具以及优劣
  • Python----计算机视觉处理(opencv:图片灰度化)
  • go 安装swagger
  • 【论文精读】Deformable DETR:用于端到端目标检测可变形 Transformer
  • go 加载yaml配置文件
  • 3-1 写分享报告
  • 鸿蒙编译框架插件HvigorPlugin接口的用法介绍
  • 欧盟公布对美关税反制清单,瞄准美国飞机等产品
  • 印度外交秘书:“朱砂行动”不针对军事设施,无意升级事态
  • 上海如何为街镇营商环境赋能?送政策、配资源、解难题、强活力
  • 上海发布大风黄警:预计未来24小时内将出现8-10级大风
  • 美联储主席:不打算先发制人地降息,将继续观望
  • 陈雯出任外交部离退休干部局局长,此前为外交部办公厅副主任