Python Language
Heapq
Zoeken…
Grootste en kleinste items in een verzameling
Om de grootste items in een verzameling te vinden, heeft de heapq
module de functie nlargest
, we geven er twee argumenten door, de eerste is het aantal items dat we willen ophalen, de tweede is de collectienaam:
import heapq
numbers = [1, 4, 2, 100, 20, 50, 32, 200, 150, 8]
print(heapq.nlargest(4, numbers)) # [200, 150, 100, 50]
Ook aan de kleinste items in een collectie op te sporen, gebruiken we nsmallest
functie:
print(heapq.nsmallest(4, numbers)) # [1, 2, 4, 8]
Zowel de nlargest
als de nsmallest
functies hebben een optioneel argument (sleutelparameter) voor gecompliceerde gegevensstructuren. Het volgende voorbeeld toont het gebruik van age
woning aan de oudste en de jongste mensen op te halen uit people
woordenboek:
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'}]
Kleinste item in een verzameling
De meest interessante eigenschap van een heap
is dat het kleinste element altijd het eerste element is: heap[0]
import heapq
numbers = [10, 4, 2, 100, 20, 50, 32, 200, 150, 8]
heapq.heapify(numbers)
print(numbers)
# Output: [2, 4, 10, 100, 8, 50, 32, 200, 150, 20]
heapq.heappop(numbers) # 2
print(numbers)
# Output: [4, 8, 10, 100, 20, 50, 32, 200, 150]
heapq.heappop(numbers) # 4
print(numbers)
# Output: [8, 20, 10, 100, 150, 50, 32, 200]
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow