需求:在列表、集合等数据结构中找出最大或者最小的N个元素
- 使用
heapq
模块中的nlargest()
和nsmallest()
函数
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
n = 3
print('最大的%d个元素:' % n, heapq.nlargest(n, nums))
print('最小的%d个元素:' % n, heapq.nsmallest(n, nums))
# Out:
# 最大的{}个元素: [42, 37, 23]
# 最小的{}个元素: [-4, 1, 2]
还可处理列表嵌套字典的数据结构
- 在此使用水果列表举例,假设我们有许多水果🍉🍎🍊🍐🍅🍌🍇,现在需要根据水果的价格进行选择
fruits = [
{'name': 'apple', 'weight': 7, 'price': 13.1},
{'name': 'orange', 'weight': 6, 'price': 7.5},
{'name': 'watermelon', 'weight': 40, 'price': 20.3},
{'name': 'pear', 'weight': 8, 'price': 6},
{'name': 'strawberry', 'weight': 3, 'price': 30.5},
{'name': 'banana', 'weight': 4, 'price': 3.7},
{'name': 'tomato', 'weight': 5, 'price': 2.4},
{'name': 'grape', 'weight': 1.5, 'price': 21}
]
n = 3
expensive = heapq.nlargest(n, fruits, key=lambda x: x['price'])
cheap = heapq.nsmallest(n, fruits, key=lambda x: x['price'])
print('最便宜的%d种水果:' % n, cheap)
print('最贵的%d种水果:' % n, expensive)
# Out:
# 最便宜的3种水果: [{'name': 'tomato', 'weight': 5, 'price': 2.4}, {'name': 'banana', 'weight': 4, 'price': 3.7}, {'name': 'pear', 'weight': 8, 'price': 6}]
# 最贵的3种水果: [{'name': 'strawberry', 'weight': 3, 'price': 30.5}, {'name': 'grape', 'weight': 1.5, 'price': 21}, {'name': 'watermelon', 'weight': 40, 'price': 20.3}