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中的生成器及其与迭代器的差异
Jun 20 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python实现简单五子棋游戏
Jun 18 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
python能做哪方面的工作
Jun 15 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类
2008/04/09 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
Python XML RPC服务器端和客户端实例
2014/11/22 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物