Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例


Posted in Python onMarch 15, 2018

本文实例讲述了Python找出序列中出现次数最多的元素。分享给大家供大家参考,具体如下:

问题:找出一个元素序列中出现次数最多的元素是什么

解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()方法直接告诉你答案。

# Determine the most common words in a list
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)
top_three = word_counts.most_common(3)
print(top_three)
# outputs [('eyes', 8), ('the', 5), ('look', 4)]
# Example of merging in more words
morewords = ['why','are','you','not','looking','in','my','eyes']
word_counts.update(morewords) #使用update()增加计数
print(word_counts.most_common(3))
>>> ================================ RESTART ================================
>>>
[('eyes', 8), ('the', 5), ('look', 4)]
[('eyes', 9), ('the', 5), ('my', 4)]
>>>

在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。

>>> word_counts
Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>> word_counts.most_common(3) #top_three
[('eyes', 9), ('the', 5), ('my', 4)]
>>> word_counts['not']
2
>>> word_counts['eyes']
9
>>> word_counts['eyes']+1
10
>>> word_counts
Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>> word_counts['eyes']=word_counts['eyes']+1 #手动增加元素计数
>>> word_counts
Counter({'eyes': 10, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>>

增加元素出现次数可以通过手动进行增加,也可以借助update()方法;

另外,Counter对象另一个特性是它们可以同各种数学运算操作结合起来使用:

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

当面对任何需要对数据制表或计数的问题时,Counter对象都是你手边的得力工具。比起利用字典自己手写算法,更应采用该方式完成任务。

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python绘图模块matplotlib示例详解
Jul 26 Python
numpy 声明空数组详解
Dec 05 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
如何实现更换Jupyter Notebook内核Python版本
May 18 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 Python
python 爬虫请求模块requests详解
Dec 04 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 #Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 #Python
python实现word 2007文档转换为pdf文件
Mar 15 #Python
python中使用PIL制作并验证图片验证码
Mar 15 #Python
Python读取Word(.docx)正文信息的方法
Mar 15 #Python
30秒轻松实现TensorFlow物体检测
Mar 14 #Python
tensorflow识别自己手写数字
Mar 14 #Python
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
js脚本编写简单刷票投票系统
2017/06/27 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
javascript的this关键字详解
2019/05/20 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python pandas生成时间列表
2019/06/29 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
2014年教师节寄语
2014/04/03 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
解决hive中导入text文件遇到的坑
2021/04/07 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏