集合中最大和最小的專案
為了找到集合中最大的專案,heapq
模組有一個名為 nlargest
的函式,我們傳遞兩個引數,第一個是我們要檢索的專案數,第二個是集合名稱:
import heapq
numbers = [1, 4, 2, 100, 20, 50, 32, 200, 150, 8]
print(heapq.nlargest(4, numbers)) # [200, 150, 100, 50]
同樣,為了找到集合中的最小項,我們使用 nsmallest
函式:
print(heapq.nsmallest(4, numbers)) # [1, 2, 4, 8]
nlargest
和 nsmallest
函式都為複雜的資料結構採用可選引數(關鍵引數)。以下示例顯示了使用 age
屬性從 people
字典中檢索最老和最年輕的人:
people = [
{'firstname': 'John', 'lastname': 'Doe', 'age': 30},
{'firstname': 'Jane', 'lastname': 'Doe', 'age': 25},
{'firstname': 'Janie', 'lastname': 'Doe', 'age': 10},
{'firstname': 'Jane', 'lastname': 'Roe', 'age': 22},
{'firstname': 'Johnny', 'lastname': 'Doe', 'age': 12},
{'firstname': 'John', 'lastname': 'Roe', 'age': 45}
]
oldest = heapq.nlargest(2, people, key=lambda s: s['age'])
print(oldest)
# Output: [{'firstname': 'John', 'age': 45, 'lastname': 'Roe'}, {'firstname': 'John', 'age': 30, 'lastname': 'Doe'}]
youngest = heapq.nsmallest(2, people, key=lambda s: s['age'])
print(youngest)
# Output: [{'firstname': 'Janie', 'age': 10, 'lastname': 'Doe'}, {'firstname': 'Johnny', 'age': 12, 'lastname': 'Doe'}]