利用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获取mp3文件信息的方法
Jun 15 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
flask中过滤器的使用详解
Aug 01 Python
Django添加feeds功能的示例
Aug 07 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
对python中list的五种查找方法说明
Jul 13 Python
让你相见恨晚的十个Python骚操作
Nov 18 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注释实例技巧
2008/10/03 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
详解python3中tkinter知识点
2018/06/21 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
python数据挖掘需要学的内容
2019/06/23 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
python调用接口的4种方式代码实例
2019/11/19 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
酒店管理专业自荐信
2014/05/23 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
收款授权委托书
2014/10/02 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
美丽心灵观后感
2015/06/01 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
python实现进度条的多种实现
2021/04/29 Python
redis 限制内存使用大小的实现
2021/05/08 Redis
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB