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实现监控windows服务并自动启动服务示例
Apr 17 Python
Python栈类实例分析
Jun 15 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
python编写Logistic逻辑回归
Dec 30 Python
python中的字典操作及字典函数
Jan 03 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
用python编写第一个IDA插件的实例
May 29 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python实点云分割k-means(sklearn)详解
May 28 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面向对象编程快速入门
2006/12/14 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
sina的lightbox效果。
2007/01/09 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
文员自我评价怎么写
2013/09/19 职场文书
小学教师岗位职责
2013/11/25 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
学校联谊活动方案
2014/02/15 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
浅谈如何保证Mysql主从一致
2022/03/13 MySQL
Golang map映射的用法
2022/04/22 Golang