利用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 相关文章推荐
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
Python实现的堆排序算法示例
Apr 29 Python
python实现剪切功能
Jan 23 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python基于SMTP协议发送邮件
May 31 Python
Python高级property属性用法实例分析
Nov 19 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Python爬取梨视频的示例
Jan 29 Python
利用python做数据拟合详情
Nov 17 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
php实现等比例压缩图片
2018/07/26 PHP
经验几则 推荐
2006/09/05 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js简易版购物车功能
2017/06/17 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
js实现转动骰子模型
2019/10/24 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python 字典的打印实现
2019/09/26 Python
Django 自定义分页器的实现代码
2019/11/24 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
学雷锋献爱心活动总结
2015/05/11 职场文书