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 21 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
python实现剪切功能
Jan 23 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
简单了解python中的与或非运算
Sep 18 Python
python中time库的实例使用方法
Oct 31 Python
关于sys.stdout和print的区别详解
Dec 05 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
Python Django搭建网站流程图解
Jun 13 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
pyqt5中动画的使用详解
2020/04/01 Python
python支持多继承吗
2020/06/19 Python
利用Python优雅的登录校园网
2020/10/21 Python
python切割图片的示例
2020/11/12 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
大四本科生的自我评价
2013/12/30 职场文书
2016新年晚会开场白
2015/12/03 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
python套接字socket通信
2022/04/01 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP