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使用递归解决全排列数字示例
Feb 11 Python
python实现SMTP邮件发送功能
Jun 16 Python
Python使用functools实现注解同步方法
Feb 06 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
python实现网页自动签到功能
Jan 21 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
python IDLE添加行号显示教程
Apr 25 Python
Python使用pdb调试代码的技巧
May 03 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
php正则表达式(regar expression)
2011/09/10 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
几道PHP面试题
2013/04/14 面试题
2014年小学重阳节活动策划方案
2014/09/16 职场文书