Python每天3分钟 #050 – 获取列表中最大或最小的n个数字

欢迎访问Python每天3分钟系列。

每天花3分钟时间,学习或温习一个Python知识点。今天是第050篇:

获取列表中最大或最小的n个数字

给出一个列表,如何获取其中最大的3个数字,或者最小的三个数字?

scores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]

远古青年可能会自己实现算法。

普通青年可以这么做:先排序,再切片。

scores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]

# 最大的三个数字
scores.sort(reverse=True)
print(scores[0:3])

# 最小的三个数字
scores.sort()
print(scores[0:3])

打印结果:

[91, 87, 82]
[15, 33, 33]

但我今天重点要介绍的是heapq模块:

import heapq

scores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]

print(heapq.nlargest(3, scores))  # [91, 87, 82]
print(heapq.nsmallest(5, scores))  # [15, 33, 33, 49, 51]

打印结果:

[91, 87, 82]
[15, 33, 33, 49, 51]

heapq是Python自带的模块,它实现了优先队列(Priority Queue)算法,以及一些方便的方法,比如获取最大,最小的n个数字等。

在数据量不大的情况下,用哪种方法都问题不大。但在数据量比较大的情况下,用heapq的效率可能要好很多。既然这样,不如就用heapq

原文链接:http://www.zsiss.com/5644.html,转载请注明出处。

0

评论0

请先

爱分享推出ChatGPT国内镜像,无需魔法直接用!写文章,写代码,做PPT,做网站原创软文效果好到爆炸 https://chat.gcrup.com

社交账号快速登录