利用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利用datetime模块计算时间差
Aug 04 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 Python
python实现八大排序算法(2)
Sep 14 Python
有趣的python小程序分享
Dec 05 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 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
PHP脚本的10个技巧(3)
2006/10/09 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
DOM相关内容速查手册
2007/02/07 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
python实现多线程采集的2个代码例子
2014/07/07 Python
tensorflow识别自己手写数字
2018/03/14 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python字典一键多值实例代码分享
2019/06/14 Python
django Admin文档生成器使用详解
2019/07/22 Python
基于python监控程序是否关闭
2020/01/14 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
聊聊python中的循环遍历
2020/09/07 Python
自荐信怎么写呢?
2013/12/09 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
Python 可迭代对象 iterable的具体使用
2021/08/07 Python