Python Language
Heapq
Suche…
Größte und kleinste Objekte einer Kollektion
Um die größten Elemente in einer Auflistung zu finden, verfügt das heapq
Modul über eine Funktion, die als nlargest
wird. Wir übergeben ihm zwei Argumente. Das erste ist die Anzahl der Elemente, die wir abrufen möchten, das zweite ist der Name der Sammlung:
import heapq
numbers = [1, 4, 2, 100, 20, 50, 32, 200, 150, 8]
print(heapq.nlargest(4, numbers)) # [200, 150, 100, 50]
In ähnlicher Weise verwenden wir die nsmallest
Funktion, um die kleinsten Objekte in einer Sammlung zu finden:
print(heapq.nsmallest(4, numbers)) # [1, 2, 4, 8]
nsmallest
Funktionen nlargest
und nsmallest
ein optionales Argument (Schlüsselparameter) für komplizierte Datenstrukturen. Das folgende Beispiel zeigt die Verwendung der Eigenschaft age
, um die ältesten und jüngsten Personen aus dem people
Dictionary abzurufen:
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'}]
Kleinster Artikel in einer Kollektion
Die interessanteste Eigenschaft eines heap
ist, dass das kleinste Element immer das erste Element ist: 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow