【编程课堂】计数器 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 实现

相关文章
|
5月前
|
安全 Java
Java多线程基础-10:代码案例之定时器(一)
`Timer` 是 Java 中的一个定时器类,用于在指定延迟后执行指定的任务。它常用于实现定时任务,例如在网络通信中设置超时或定期清理数据。`Timer` 的核心方法是 `schedule()`,它可以安排任务在延迟一段时间后执行。`
101 1
|
2月前
|
Java 调度
搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
掌握上述多线程控制方法的运用,可以在Java多线程程序编写中进行更加深入的线程管理,确保程序运行更加高效、稳定。在面试中准确并熟练地讲解这些概念,确实有可能让面试官对你的专业能力留下深刻印象。
26 0
|
4月前
|
前端开发
技术经验分享:csscounter计数器与content总结
技术经验分享:csscounter计数器与content总结
16 0
|
5月前
|
Java 调度
Java多线程基础-10:代码案例之定时器(二)
Java 多线程基础中,定时器(Timer)的实现通常使用 `PriorityBlockingQueue` 和 `wait/notify` 机制来管理任务。
35 0
|
5月前
|
Java 调度
一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
47 2
|
5月前
|
缓存 Java
5个案例和流程图让你从0到1搞懂volatile关键字
5个案例和流程图让你从0到1搞懂volatile关键字
|
5月前
|
SQL Java
一直傻傻分不清 count(*) count(id) count(1) 这次终于整明白了
一直傻傻分不清 count(*) count(id) count(1) 这次终于整明白了
57 0
|
前端开发
react实战笔记76:完成counter计数器
react实战笔记76:完成counter计数器
88 0
react实战笔记76:完成counter计数器
|
安全 Java
JUC高频面试题---由Volatile印出来的一系列问题
JUC高频面试题---由Volatile印出来的一系列问题
112 0
JUC高频面试题---由Volatile印出来的一系列问题
|
JavaScript 前端开发
【基础篇】学好JavaScript的循环、比较和判断,80%的业务场景都能hold住
【基础篇】学好JavaScript的循环、比较和判断,80%的业务场景都能hold住
96 0
【基础篇】学好JavaScript的循环、比较和判断,80%的业务场景都能hold住