heapq
- 简单数据结构取出最大最小N个元素
- 复杂数据结构中取出最大最小N个元素
- 代码解析:`lambda`
Python 中有 heapq 模块可以快捷找到数组中最大最小的 N 个元素;
heapq.nlargest(num, arr) # 从arr数组中取出最大num个元素
heapq.nsmallest(num, arr) # 从arr数组中取出最小num个元素
简单数据结构取出最大最小N个元素
e . g . 1 e.g.1 e.g.1 分别取出一维数组中最大和最小的3个元素;
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
复杂数据结构中取出最大最小N个元素
e
.
g
.
2
e.g.2
e.g.2 复杂的数据结构,依据 price
字段分别取出字典数组中最大最小的3个字典;
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}
]
print(heapq.nlargest(3, portfolio, key=lambda s: s['price']))
print(heapq.nsmallest(3, portfolio, key=lambda s: s['price']))
代码解析:lambda
在 Python 中,lambda
是一个关键字,用于创建匿名函数。所谓的匿名函数是指没有名字的函数,它们通常用于简短的、一次性的任务。lambda
函数的语法非常简洁:
lambda arguments: expression
lambda
函数接受一个或多个参数( arguments
),并且返回一个表达式的值( expression
)。这里的表达式通常只包含一个操作数,并且返回该操作数的值。
在上述代码中:
print(heapq.nlargest(3, portfolio, key=lambda s: s['price']))
这行代码的意思是:
- 使用
heapq
模块的nlargest
函数。 - 从
portfolio
列表中找出最大的三个元素。 - 使用
lambda s: s['price']
作为排序的键值(即根据每个字典元素中'price'
键的值进行排序)。
因此,这个 lambda
函数在这里的作用是指定排序的依据,即每个字典元素中的 'price'
值。