Python找到最大的N个(前N个)或最小的N个项目
系列教程导航
- Python 基础教程
- 在 SublimeEditor 中配置 Python 环境
- Python 代码中添加注释
- Python 中的变量的使用
- Python 中的数据类型
- Python 中的关键字
- Python 字符串操作
- Python 中的 list 操作
- Python 中的 Tuple 操作
- Python max()和 min()–在列表或数组中查找最大值和最小值
- Python 找到最大的 N 个(前 N 个)或最小的 N 个项目
- Python 读写 CSV 文件
- Python 中使用 httplib2–HTTP GET 和 POST 示例
- Python 将 tuple 开箱为变量或参数
- Python 开箱 Tuple–太多值无法解压
- Python multidict 示例–将单个键映射到字典中的多个值
- Python OrderedDict–有序字典
- Python 字典交集–比较两个字典
- Python 优先级队列示例
简介
本文介绍如何使用 Python 标准库 heapq 中的 nlargest() 和 nsmallest() 函数,从元素集合中查找最大(或最小)的 N 个元素。
使用 heapq 模块查找最大或最小的 N 个项目
Python 的 heapq 模块提供了高效的堆队列算法,可用于从集合中查找 N 个最大或最小的项目。该模块主要包含以下两个核心函数:
nlargest(): 查找最大的 N 个元素。nsmallest(): 查找最小的 N 个元素。
在简单可迭代对象中查找项目
对于简单的数字列表,可以直接使用这两个函数获取前 N 个最大值或最小值。
示例代码 (example1.py):
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
# 查找最大的 3 个元素
print(heapq.nlargest(3, nums))
# 输出:[42, 37, 23]
# 查找最小的 3 个元素
print(heapq.nsmallest(3, nums))
# 输出:[-4, 1, 2]在复杂可迭代对象中查找项目
当处理包含字典或其他复杂对象的列表时,可以通过 key 参数指定排序的依据字段。
示例代码 (example2.py):
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}
]
# 查找价格最低的 3 个股票
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
print(cheap)
# 输出:
# [
# {'price': 16.35, 'name': 'YHOO', 'shares': 45},
# {'price': 21.09, 'name': 'FB', 'shares': 200},
# {'price': 31.75, 'name': 'HPQ', 'shares': 35}
# ]
# 查找价格最高的 3 个股票
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(expensive)
# 输出:
# [
# {'price': 543.22, 'name': 'AAPL', 'shares': 50},
# {'price': 115.65, 'name': 'ACME', 'shares': 75},
# {'price': 91.1, 'name': 'IBM', 'shares': 100}
# ]性能提示:
如果您只是想查找单个最小或最大项(即 N=1),直接使用内置的min()和max()函数速度会更快。
学习愉快!
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。