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之入门(五)缩进和选择
May 27 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
python实现批量按比例缩放图片效果
Mar 30 Python
Python实现查看系统启动项功能示例
May 10 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
Django 迁移、操作数据库的方法
Aug 02 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python底层封装实现方法详解
Jan 22 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 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算开始时间到过期时间的相隔的天数
2011/01/12 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
初探nodeJS
2017/01/24 NodeJs
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
C++的几个面试题附答案
2016/08/03 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
CLR与IL分别是什么含义
2016/08/23 面试题
秋季运动会活动方案
2014/02/05 职场文书
大专毕业生求职信
2014/07/05 职场文书
个人自荐书怎么写
2015/03/26 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫