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操作CouchDB数据库简单示例
Mar 10 Python
初步解析Python中的yield函数的用法
Apr 03 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
python 如何设置守护进程
Oct 29 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 Python
Flask处理Web表单的实现方法
Jan 31 Python
编写python程序的90条建议
Apr 14 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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输出Excel文件类
2010/02/08 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jquery判断浏览器类型的代码
2012/11/05 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
你准备好迎接vue3.0了吗
2020/04/28 Javascript
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python实现五子棋小游戏
2020/03/25 Python
pandas中的series数据类型详解
2019/07/06 Python
pycharm配置git(图文教程)
2019/08/16 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
如何清空Session
2015/02/23 面试题
单位门卫岗位职责
2013/12/20 职场文书
回门宴父母答谢词
2014/01/26 职场文书
教师绩效工资方案
2014/02/01 职场文书
客户答谢会活动方案
2014/08/31 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
求职自荐信怎么写
2015/03/04 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL