Python实现从N个数中找到最大的K个数


Posted in Python onApril 02, 2020

提出问题:

如何在某集合里面找出最大或最小的K个元素。

解决思路:

找出最大或最下的K个元素,可以使用Python库中的heapq模块,该模块提供两个函数nlargest()求最大K个和nsmallest()求最小K个。

下面我们举例说明:

import heapq

nums=[12,-9,-3,32,9,56,23,0,11,34]
print(heapq.nlargest(4,nums)) #-->最大的4个
print(heapq.nsmallest(4,nums)) #-->最小的4个

运行结果:

[56, 34, 32, 23]
[-9, -3, 0, 9]

分析下,nlargest()和nsmallest()函数有两个参数,第一个参数是求最大或最下的K个元素,第二个参数是待查询的集合。除此之外,他们也可以接受一个参数key,这使得他们处理更加复杂的数据结构。例如:

import heapq
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]

cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
print(cheap)
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(expensive)

运行结果:

[{'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}]
[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price': 115.65}, {'name': 'IBM', 'shares': 100, 'price': 91.1}]

深入讨论:

假如说,我们正在寻找某集合中最大或最下的K个元素,并且N的数值很小,如果再使用上面的方法,可能就不是最好的选择。那么,我们介绍heapify()函数,这个函数首先会在底层将数据转换成列表,并且元素会以堆的顺序排列。举例:

Python实现从N个数中找到最大的K个数

从上面的代码中,我们看出元素确实是以堆的顺序排列的,同时堆hea_num[0]对应的元素-9总是最小的。在heapq()模块中还提供heappop()函数,该方法会把第一个元素(最小的)给弹出来,然后第二小的元素会自动补位,它的操作时间复杂度是O(log N),其中N代表的是堆的大小。

具体的操作看下面的代码:

Python实现从N个数中找到最大的K个数

总结一下:

当要查找的元素数量比较少的时,适合使用nlargest()和nsmallest()

当只查找集合中最大或最小的1个元素时,推荐使用min()和max()

当N和集合本身大小差不多时,应该是先对集合排序,然后做切片操作(比如:sorted(items)[:N]或sorted(items)[-N:])

补充知识:python三个数从小到大排序

Python实现从N个数中找到最大的K个数

python三个数从小到大排序

1、首先定义一个函数paiLie();然后在paiLie函数内使用for循环和input获取三个数字并存入列表;最后调用列表的sort()方法进行排序即可。

def paiLie():
 result = []
 for i in range(3):
  x = input("请输入数字:")
  result.append(x)
 result.sort()
 print result

2、调用

paiLie()
请输入数字:56
请输入数字:5
请输入数字:89

运行结果:

[5, 56, 89]

以上这篇Python实现从N个数中找到最大的K个数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析html开发库pyquery使用方法
Feb 07 Python
python实现TF-IDF算法解析
Jan 02 Python
python之pandas用法大全
Mar 13 Python
python 对象和json互相转换方法
Mar 22 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
Python2包含中文报错的解决方法
Jul 09 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
python getopt模块使用实例解析
Dec 18 Python
python根据字典的键来删除元素的方法
Aug 16 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
基于python实现银行管理系统
Apr 20 Python
Python任务调度利器之APScheduler详解
Apr 02 #Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 #Python
python topk()函数求最大和最小值实例
Apr 02 #Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 #Python
Python如何通过百度翻译API实现翻译功能
Apr 02 #Python
Python基于百度AI实现OCR文字识别
Apr 02 #Python
python 穷举指定长度的密码例子
Apr 02 #Python
You might like
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
利用python画一颗心的方法示例
2017/01/31 Python
Python API自动化框架总结
2019/11/12 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
python3处理word文档实例分析
2020/12/01 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
刚毕业大学生自荐信范文
2014/02/20 职场文书
工作作风承诺书
2014/08/30 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
学校国庆节活动总结
2015/03/23 职场文书
暖春观后感
2015/06/08 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫