利用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通过邮件服务器端口发送邮件的方法
Apr 30 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Python面向对象类继承和组合实例分析
May 28 Python
python 除法保留两位小数点的方法
Jul 16 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
python的json包位置及用法总结
Jun 21 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
js给selected添加options的方法
2015/05/06 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
python实现学生管理系统
2018/01/11 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
写出一个方法实现冒泡排序
2016/07/08 面试题
项目计划书范文
2014/01/09 职场文书
食品安全检查制度
2014/02/03 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
主持人大赛开场白
2015/05/29 职场文书
感动中国何玥观后感
2015/06/02 职场文书
幼儿园见习总结
2015/06/23 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python