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转换HTML到Text纯文本的方法
Jan 15 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
和孩子一起学习python之变量命名规则
May 27 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
python中time库的实例使用方法
Oct 31 Python
Python实现密码薄文件读写操作
Dec 16 Python
如何使用python代码操作git代码
Feb 29 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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/10/09 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
动态加载iframe
2006/06/16 Javascript
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
python实现异步回调机制代码分享
2014/01/10 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
网络优化专员求职信
2014/05/04 职场文书
消防工作实施方案
2014/06/09 职场文书
学校搬迁方案
2014/06/15 职场文书
小学优秀班主任材料
2014/12/17 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
小学校园广播稿
2015/08/18 职场文书
2016党员入党决心书
2015/09/22 职场文书