Python中使用heapq模块找到最大或最小的N个元素_爱吃跳跳糖的小怪兽的博客-程序员宅基地

技术标签: Python中使用heapq模块找到最大或最小的N个元素  python  列表  数据结构  

Python中使用heapq模块找到最大或最小的N个元素

在heapq中有两个函数模块,分别是nlargest()、nsmallest(),可以用这两个函数分别找到列表中最大和最小的元素。

在这里插入图片描述

这两个函数分别有三个参数,分别为n, iterable, key

  1. n: 限制需要的元素个数
  2. iterable:可迭代对象
  3. key:对复杂的数据进行处理

情况一:仅对列表数据进行操作

对列表进行处理时无需考虑key值,仅需限定参数n、iterable即可。
'''
Author:爱吃跳跳糖的小怪兽
time:2020-8-27
Version:1.0
'''

import heapq

List_Example1 = [-100, 2, 5, 7, -78, 85, 56, -21, 0]     #假定一个无序的整数列表需要进行数据提取
print(heapq.nlargest(3,List_Example1))
print(heapq.nsmallest(3,List_Example1))
Pycharm中运行结果如下:

在这里插入图片描述

情况二:需要对稍微复杂的数据进行操作

如果不设定key值时会出现以下错误

代码块

'''
Author:爱吃跳跳糖的小怪兽
time:2020-8-27
Version:1.0
'''

import heapq
achievements = [
	{'name':'xu', 'data':98},
	{'name':'yuan', 'data':95},
	{'name':'qi', 'data':99},
	{'name':'shuai', 'data':45},
	{'name':'ge', 'data':70}
]
print(heapq.nsmallest(3,achievements))
print(heapq.nlargest(3,achievements))

报错截图:
在这里插入图片描述
错误分析:程序抛出了一个类型错误,表示不支持对两个字典进行比较。

解决方法:对key值进行设定,这里使用lamda匿名函数将data键对应的值传返回至key值中,比对各个字典中的data数据以进行排列。

'''
Author:爱吃跳跳糖的小怪兽
time:2020-8-27
Version:1.0
'''

import heapq

achievements = [
	{'name':'xu', 'data':98},
	{'name':'yuan', 'data':95},
	{'name':'qi', 'data':99},
	{'name':'shuai', 'data':45},
	{'name':'ge', 'data':70}
]
print(heapq.nsmallest(3,achievements,key=lambda x:x['data']))
print(heapq.nlargest(3,achievements,key=lambda x:x['data']))

输出结果截图:

在这里插入图片描述

总结

在使用heapq模块的nlargest()和nsmallest()函数进行数据查找时,需要先行判断数据类型,考虑是否设定key值,以确保函数的正常运行。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44860172/article/details/108254095

智能推荐

融云 iOS消息体系架构详解-程序员宅基地

融云 iOS SDK 体系架构本文档将详细介绍融云的 SDK 产品架构和消息体系,以便于您更深入的了解融云并更快速的开发自己的产品。融云 SDK 系统架构IMKitIMKit 的功能主要是封装各种界面对象,服务于开发者快速实现自己的产品,主要特点是是支持快速集成,支持丰富的界面定制功能。IMLibIMLib 的功能是提供基本通信能力库,封装了

人工智能 人脸识别项目的改造-程序员宅基地

背景介绍:从之前的设计模块方面来思考,人工智能这个项目里面的上传功能应该如何完善成一个真正的微服务,之前的调用链是批量的上传功能依赖单张入库的功能,而这里的单张入库的功能是一个单独的服务,其实这里的单张入库的模块,需要进行改造。方案:把单张入库的模块进行改造,提取公共的模块,减少对象的冗余,以及避免数据库表对象的完全暴露,提高安全意识。从单张人脸特征入库的模块来分析,这个服务只要是依赖了算法的...

Anemometer基于pt-query-digest将MySQL慢查询可视化-程序员宅基地

参考文章:http://ourmysql.com/archives/1359?utm_source=tuicool&utm_medium=referral官方:https://github.com/box/Anemometer单节点Anemometer监控1 安装anemometer#cd/data/www/web3#gitclonehttps://git...

SQL Server、Oracle和MySQL中查出值为NULL的替换-程序员宅基地

本文讲述SQL Server、Oracle、MySQL查出值为NULL的替换。AD:2014WOT全球软件技术峰会北京站 课程视频发布在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1、MSSQL: ISNULL() 语法 ISNULL ( check_expression , replacement_value ) 参数 ch

关于tomcat启动报错:java.lang.reflect.InvocationTargetException-程序员宅基地

tomcat 启动老是报错,可以发布web项目,但是tomcat的webapps目录下根本就没有这个web项目,郁闷很久了,网上搜了很多的方法,有人说,把webapps下的文件全部删除,并且把work,logs下的目录删除,再重新启动tomcat ,可是问题依旧。。。最后直接把tomcat卸载,重新安装了一遍,这样果然就可以了,最好要把重新安装的tomcat放在不同于上一个tomcat文件夹下,重

centos普通用户开启图形化界面 startx 不成功-程序员宅基地

新装的centos,由于显卡不兼容,先安装的命令行界面,然后再安装的图形化界面,root下能使用startx开启图形化界面,但是普通用户不行。 解决方法如下:[swmwlm@localhost root]$ su rootPassword:[root@localhost ~]# chmod -R 777 /tmp[root@localhost ~]# touch /var/r...

随便推点

nginx做301重定向if判断报错unknown directive "if($host!="_nginx 判断host-程序员宅基地

if ( $host = '56zx.com' ){ rewrite ^/(.*)$ http://www.56zx.com/$1 permanent;}将不带www的域名重定向到带www的域名,规则如下:if($host='56zx.com'){ rewrite ^/(.*)$ http://www.56zx.com/$1 permanent;}原因是nginx语_nginx 判断host

thymeleaf 下拉选择框 处理 For LayUI_layui 表格+ thymeleaf 联动下拉框-程序员宅基地

实体package com.yanzhen.po;import lombok.Data;@Datapublic class Dic { private Integer id; private String name; private String pName;}Daopackage com.yanzhen.dao;import com.yanzhen.po.Dic;import java.util.List;public interface DicDa_layui 表格+ thymeleaf 联动下拉框

【181125】VC++ 3种模板匹配法实现的手写数字识别示例源代码-程序员宅基地

源码下载简介书中的一个经典实例,在此摘录出来,让C++此方面编程的朋友可以更容易的找得到,压缩包内有3种识别技术的算法实例,需要慢慢研究哦。源码下载地址:点击下载备用下载地址:点击下载...

Xshell7、Xftp评估期已过,2022年最新办法,教育版_xshell教育版_逆夏夏的博客-程序员宅基地

1.打开网页家庭/学校免费 - NetSarang Website (xshell.com)2.输入邮箱3.登录邮箱 下载Xshell 和 Xftp4.下载好后 不用删除之前的版本,它会自动替换5.不过它是教育版_xshell教育版

没那么简单的分库分表:高并发下数据库架构设计的那些坑!-程序员宅基地

我的新课《C2C 电商系统微服务架构120天实战训练营》在公众号儒猿技术窝上线了,感兴趣的同学,可以长按扫描下方二维码了解课程详情:课程大纲请参见文末目录: ..._分库导致并发访问量怎么样

tensorflow中RMSprop优化器运用_keras rmsprop的超参数-程序员宅基地

tensorflow中RMSprop优化器运用RMSprop优化器引用API:tf.keras.optimizers.RMSprop代码实现:#RMSpropbeta = 0.9 #定义超参数,经验值为0.9v_w = beta * v_w + (1 - beta) * tf.square(grads[0]) #求二阶动量v_wv_b = beta * v_b + (1 - beta) * tf.square(grads[1]) #求二阶动量v_b..._keras rmsprop的超参数

推荐文章

热门文章

相关标签