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