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计算三角函数之acos()方法的使用
May 15 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
python中set常用操作汇总
Jun 30 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python函数的作用域及关键字详解
Aug 20 Python
Django实现基于类的分页功能
Oct 31 Python
Python运行DLL文件的方法
Jan 17 Python
python 项目目录结构设置
Feb 14 Python
python必学知识之文件操作(建议收藏)
May 30 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
Js apply方法详解
2017/02/16 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
使用Python求解最大公约数的实现方法
2015/08/20 Python
itchat接口使用示例
2017/10/23 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python中的set实现不重复的排序原理
2018/01/24 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python数据库小程序源代码
2019/09/15 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
10个示例带你掌握python中的元组
2020/11/23 Python
北京银河万佳Java面试题
2012/03/21 面试题
业务副厂长岗位职责
2014/01/03 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
企业标语口号
2014/06/10 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
《藏戏》教学反思
2016/02/23 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
openstack云计算keystone组件工作介绍
2022/04/20 Servers
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript