Heim  >  Artikel  >  Backend-Entwicklung  >  Vertiefendes Verständnis der Einführung in das integrierte Heapq-Modul von Python

Vertiefendes Verständnis der Einführung in das integrierte Heapq-Modul von Python

高洛峰
高洛峰Original
2017-03-15 14:19:272605Durchsuche

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 die

Funktion 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

all

est(n, iterable, key=None): wie oben, aber umgekehrt

demo

1. 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))

2. Finden Sie die Objektliste mit der Taste Der kleinste Artikel im Preis

 [0, 1, 1, 2, 3, 4, 5, 6]
wird wie folgt ausgegeben

portfolio = [
    {&#39;name&#39;: &#39;IBM&#39;, &#39;shares&#39;: 100, &#39;price&#39;: 91.1},
    {&#39;name&#39;: &#39;AAPL&#39;, &#39;shares&#39;: 50, &#39;price&#39;: 543.22},
    {&#39;name&#39;: &#39;FB&#39;, &#39;shares&#39;: 200, &#39;price&#39;: 21.09},
    {&#39;name&#39;: &#39;HPQ&#39;, &#39;shares&#39;: 35, &#39;price&#39;: 31.75},
    {&#39;name&#39;: &#39;YHOO&#39;, &#39;shares&#39;: 45, &#39;price&#39;: 16.35},
    {&#39;name&#39;: &#39;ACME&#39;, &#39;shares&#39;: 75, &#39;price&#39;: 115.65}
]
cheap = heapq.nsmallest(1, portfolio, key=lambda s: s[&#39;price&#39;])
print(cheap)

ext
[{'shares': 45, 'price': 16.35, 'name': 'YHOO'}]
end

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 folgt

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn