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解惑之整数比较详解
Apr 24 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
详解python的四种内置数据结构
Mar 19 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
使用pandas读取文件的实现
Jul 31 Python
分享PyCharm的几个使用技巧
Nov 10 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
python/golang 删除链表中的元素
Sep 14 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使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
详解python里的命名规范
2018/07/16 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
导致python中import错误的原因是什么
2020/07/01 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
小学生演讲稿大全
2014/04/25 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
SQL Server实现分页方法介绍
2022/03/16 SQL Server
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python