【编程课堂】计数器 Counter

简介: 上一期的编程课堂我们介绍了 有序字典 OrderedDict,这一期我们再来聊聊 同属 collections 模块的另一种数据类型 Counter。

上一期的编程课堂我们介绍了 有序字典 OrderedDict,这一期我们再来聊聊 同属 collections 模块的另一种数据类型 Counter

在了解 Counter 之前,请大家思考一个问题,现在有包含多个词汇的列表:


list1 = ['red','green','red','blue','green','red']


该如何去统计列表中各词汇出现的次数?


如果再深入一些,如何统计一本小说中,作者所用词汇出现的次数?


Python 里提供了一个优雅简洁的解决方案:Counter


关于 Counter ,在官方文档中可以找到如下描述:


A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts.


Counterdict 的子类,是用于计数。它是一个无序的集合,其中元素存储为字典键,其计数存储为字典值。计数允许为包括零或负计数的任何整数值。


在 Python Shell 里演示一下。初始化一个 Counter 对象的几种方法:


初始化可迭代对象


>>> from collections import Counter
>>> Counter('adffdsads')
Counter({'d': 3, 'f': 2, 's': 2, 'a': 2})


初始化映射对象


>>> Counter({'red':1,'green':2})
Counter({'green': 2, 'red': 1})


初始化关键字参数对象


>>> Counter(cats=4,dogs=8)
Counter({'dogs': 8, 'cats': 4})


Counterdict 的子类,所以你可以放心地像 dict 一样来使用它。具体可参考 【Python 第37课】 字典


下面看个 Counter 的常用方法:


most_common(n)


返回一个列表,包含 n 个最常见的元素已经他们的计数,如果 n 为空,则返回所有元素。


>>> c = Counter('adffdsads')
>>> c.most_common(3)
[('d', 3), ('a', 2), ('f', 2)]


通过此方法,你就可以很方便地找出频率最高的元素,省去了计数和排序的麻烦。


关于 Counter  就介绍到这里。好记性不如烂笔头,赶紧拿每期 每周一坑 里的题目来练练手吧。


近期文章推荐阅读:

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

个人开发者如何申请微信小程序

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

相关文章
|
canal 缓存 NoSQL
【Redis系列笔记】双写一致性
本文讨论了缓存不一致问题及其后果,如价格显示错误和订单计算错误。问题主要源于并发和双写操作的异常。解决方案包括使用分布式锁(但可能导致性能下降和复杂性增加)、延迟双删策略(通过延迟删除缓存来等待数据同步)以及异步同步方法,如通过Canal和MQ实现数据的最终一致性。面试中,可以提及这些策略来确保数据库和缓存数据的一致性。
1570 1
【Redis系列笔记】双写一致性
|
8月前
|
开发工具
【HarmonyOS 5】Integrating WeChat Sharing into HarmonyOS Applications
【HarmonyOS 5】Integrating WeChat Sharing into HarmonyOS Applications
313 9
|
12月前
|
Python
5.Python的流程控制语句
在编程的世界里,程序的执行流程通常并非一成不变,而是需要根据不同的条件和需求进行灵活控制。Python 作为一门简洁而强大的语言,提供了多种方式来控制代码的执行流,从条件判断到循环再到跳转语句,每一种都发挥着不可替代的作用。通过掌握这些流程控制语句,我们可以编写出更高效、灵活和智能的程序。
5.Python的流程控制语句
|
机器学习/深度学习 PyTorch 测试技术
Ultralytics YOLOv5简介
Ultralytics YOLOv5简介
|
关系型数据库 MySQL 网络安全
【Django】执行python manage.py makemigrations报错的解决方案
【Django】执行python manage.py makemigrations报错的解决方案
|
域名解析 存储 缓存
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
【5月更文挑战第21天】本文探讨了DNS缓存机制的原理及优化方法。DNS缓存是存储已解析域名与IP地址的临时数据库,能减少网络延迟,减轻服务器负担并提升用户体验。优化策略包括增加缓存容量,设置合理过期时间,使用智能DNS服务及定期清理缓存。文中还提供了一个Python示例,展示如何通过缓存提升域名解析速度。
1796 2
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
|
设计模式 Java 测试技术
单元测试运行原理探究
单元测试是软件开发过程中的重要一环,好的单测可以帮助我们更早的发现问题,为系统的稳定运行提供保障。单测还是很好的说明文档,我们往往看单测用例就能够了解到作者对类的设计意图。代码重构时也离不开单测,丰富的单测用例会使我们重构代码时信心满满。虽然单测如此重要,但是一直来都不是很清楚其运行原理,也不知道为什么要做这样或那样的配置,这样终究是不行的,于是准备花时间探究下单测原理,并在此记录。
378719 30
单元测试运行原理探究
|
人工智能 NoSQL MongoDB
国内唯一!阿里云荣膺MongoDB “2024年度DBaaS认证合作伙伴奖”
这是阿里云连续第五年斩获 MongoDB 合作伙伴奖项,也是唯一获此殊荣的中国云厂商。
3439 0