利用Python找出序列中出现最多的元素示例代码


Posted in Python onDecember 08, 2017

前言

Python包含6种内置的序列:列表、元组、字符串 、Unicode字符串、buffer对象、xrange对象。在序列中的每个元素都有自己的编号。列表与元组的区别在于,列表是可以修改,而组元不可修改。理论上几乎所有情况下元组都可以用列表来代替。有个例外是但元组作为字典的键时,在这种情况下,因为键不可修改,所以就不能使用列表。

我们在一些统计工作或者分析过程中,有事会遇到要统计一个序列中出现最多次的元素,比如一段英文中,查询出现最多的词是什么,及每个词出现的次数。一遍的做法为,将每个此作为key,出现一次,value增加1。

例如:

morewords = ['why','are','you','not','looking','in','my','eyes']
for word in morewords:
 word_counts[word] += 1

collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案。

collections模块

collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:

  • OrderedDict类:排序字典,是字典的子类。引入自2.7。
  • namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。
  • Counter类:为hashable对象计数,是字典的子类。引入自2.7。
  • deque:双向队列。引入自2.4。
  • defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。

文档参见:http://docs.python.org/2/library/collections.html。

Counter类

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你可以这样做:

words = [
 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
 'my', 'eyes', "you're", 'under'
]
from collections import Counter
word_counts = Counter(words)
# 出现频率最高的3个单词
top_three = word_counts.most_common(3)
print(top_three)
# Outputs [('eyes', 8), ('the', 5), ('look', 4)]

另外collections.Counter还有一个比较高级的功能,支持数学算术符的相加相减。

>>> a = Counter(words)
>>> b = Counter(morewords)
>>> a
Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2,
"you're": 1, "don't": 1, 'under': 1, 'not': 1})
>>> b
Counter({'eyes': 1, 'looking': 1, 'are': 1, 'in': 1, 'not': 1, 'you': 1,
'my': 1, 'why': 1})
>>> # Combine counts
>>> c = a + b
>>> c
Counter({'eyes': 9, 'the': 5, 'look': 4, 'my': 4, 'into': 3, 'not': 2,
'around': 2, "you're": 1, "don't": 1, 'in': 1, 'why': 1,
'looking': 1, 'are': 1, 'under': 1, 'you': 1})
>>> # Subtract counts
>>> d = a - b
>>> d
Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2,
"you're": 1, "don't": 1, 'under': 1})
>>>

参考文档:

https://docs.python.org/3/library/collections.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
使用Python绘制图表大全总结
Feb 11 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python 寻找局部最高点的实现
Dec 05 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 #Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 #Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 #Python
基于Django contrib Comments 评论模块(详解)
Dec 08 #Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 #Python
python在ubuntu中的几种安装方法(小结)
Dec 08 #Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 #Python
You might like
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
JQuery toggle使用分析
2009/11/16 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python实现简单的代理服务器
2015/07/25 Python
Python地图绘制实操详解
2019/03/04 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
亿企通软件测试面试题
2012/04/10 面试题
大学生创业计划书的格式要求
2013/12/29 职场文书
经典演讲稿范文
2013/12/30 职场文书
小学生新学期寄语
2014/01/19 职场文书
甜品店创业计划书
2014/08/14 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
承诺函范文
2015/01/21 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
Nginx 匹配方式
2022/05/15 Servers