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实现的石头剪子布代码分享
Aug 22 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
Python timeit模块的使用实践
Jan 13 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
python 如何在list中找Topk的数值和索引
May 20 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实现的双色球算法示例
2017/06/20 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
改版了网上的一个js操作userdata
2007/04/27 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
初识Javascript小结
2015/07/16 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
如何利用find命令查找文件
2016/11/18 面试题
初中美术教学反思
2014/01/29 职场文书
高三体育教学反思
2014/01/29 职场文书
房产公证书范本
2014/04/10 职场文书
财产公证书
2014/04/10 职场文书
职业生涯规划书前言
2014/04/15 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
技术员岗位职责
2015/02/04 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python