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列表生成器的循环技巧分享
Mar 06 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python七夕浪漫表白源码
Apr 05 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
三步实现Django Paginator分页的方法
Jun 11 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
django-filter和普通查询的例子
Aug 12 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
logging level级别介绍
Feb 21 Python
python如何建立全零数组
Jul 19 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
php自动加载的两种实现方法
2010/06/21 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
mac下安装nginx和php
2013/11/04 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript event 事件解析
2011/01/31 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python中字典和集合学习小结
2017/07/07 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
在pycharm中显示python画的图方法
2019/08/31 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
opencv实现图像几何变换
2021/03/24 Python
配件采购员岗位职责
2013/12/03 职场文书
出纳担保书范文
2014/04/02 职场文书
社团活动总结报告
2014/06/27 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
学校教学管理制度
2015/08/06 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Python中glob库实现文件名的匹配
2021/06/18 Python