heapq ist ein integriertes Modul von Python. Der Quellcode befindet sich in Lib/heapq.py. Dieses Modul bietet einen Heap-basierten Priorisierungsalgorithmus.
Die logische Struktur des Heaps ist ein vollständiger Binärbaum, und der Wert des übergeordneten Knotens im Binärbaum ist kleiner oder gleich dem Wert aller untergeordneten Knoten des Knotens. Diese Implementierung kann heap[k] <= heap[2k+1] und heap[k] <= heap[2k+2] verwenden (wobei k Index ist, gezählt von 0) Formaler Ausdruck, Bei einem Heap ist das kleinste Element das Stammelement heap[0].
Sie können den Heap über list initialisieren oder die bekannte Liste wenny in api >Object.
Heapq stellt dieFunktion Methode heapq.heappush(heap, item)
heapq.heappop(heap) bereit: Geben Sie den Wurzelknoten zurück, d heapq.heapify(x)
heapq.nlargest(n, iterable,
key=None): Gibt die n größten Werte im aufzählbaren Objekt und eine Ergebnismengenliste zurück. Der Schlüssel ist die Ergebnismenge. Operation von
heapq.nsm
allest(n, iterable, key=None): wie oben, aber umgekehrt
demo1. Sortieren Sie die Liste über die Heapq-API
Die Ausgabe ist wie folgt
def heapsort(iterable): h = [] for i in iterable: heapq.heappush(h, i) return [heapq.heappop(h) for i in range(len(h))] s = [3, 5, 1, 2, 4, 6, 0, 1] print(heapsort(s))
[0, 1, 1, 2, 3, 4, 5, 6]
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} ] cheap = heapq.nsmallest(1, portfolio, key=lambda s: s['price']) print(cheap)
[{'shares': 45, 'price': 16.35, 'name': 'YHOO'}]
Wie oben erwähnt, ist Heapq die Implementierung des minimalen Heaps. Lassen Sie uns also anhand des Quellcodes von Heapq analysieren, wie das geht Konvertieren Sie die Liste in einen minimalen Heap (das Schlüsselwort des übergeordneten Knotens ist kleiner als sowohl der linke als auch der rechte untergeordnete Knoten) kann in die folgenden Schritte unterteilt werden: 1. Beginnend mit dem letzten Element mit untergeordneten Knoten, fügen Sie dieses übergeordnete Knotenelement und seine untergeordneten Knoten hinzu. Behandeln Sie es als Einheit
2. Tauschen Sie in der Einheit das kleinere Element der beiden untergeordneten Knoten mit dem übergeordneten Knoten aus (es ist nicht erforderlich). Beurteilen Sie die Größenbeziehung zwischen dem übergeordneten Knoten und dem kleinsten untergeordneten Knoten.) Durch diesen Schritt können Sie diese Einheit in eine minimale Heap-Einheit ändern
3 > Sie können kleinere Elemente nach oben schieben
Die Ausgabe ist wie folgtDas obige ist der detaillierte Inhalt vonVertiefendes Verständnis der Einführung in das integrierte Heapq-Modul von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!