Als ich wettbewerbsfähige Programmierung durchführte und versuchte, Dijkstra in Python zu implementieren, wollte ich, dass heapq so etwas wie ("vertikaler Name", Entfernung) und nach Entfernung sortiert hat, aber ich war ein wenig besorgt über das damalige Verhalten. Es ist ein Memo-Artikel, den ich gerade bestätigt habe.
Ich fragte mich, ob so etwas wie ein benutzerdefinierter Operator eingefügt werden könnte, aber ich dachte, es wäre langsam, wenn ich es selbst machen würde, also wollte ich es so weit wie möglich vermeiden.
Ich denke, es ist eine Heapq-Spezifikation oder eine Python-Vergleichsoperator-Spezifikation, aber ich werde es zusammenfassen, weil es eine große Sache ist.
Wenn Sie die Liste in Heapq eintauchen, ** Aufsteigende Reihenfolge des ersten Elements → Aufsteigende Reihenfolge des zweiten Elements **. Es scheint, dass die Auswertung jedes Elements unabhängig erfolgt, daher ist es in Ordnung, Zahlen und Zeichenketten zu mischen.
Zusamenfassend
[[1,4],[2,0],[0,1],[0,3]]
↓
[[0,1],[0,3],[1,4],[2,0]]
Es wird so sein.
import heapq
import random
a = []
heapq.heapify(a)
for i in range(5):
heapq.heappush(a,[random.randint(0,10) for i in range(2)])
while a:
print(heapq.heappop(a))
[0, 10]
[2, 7]
[2, 7]
[2, 10]
[5, 0]
for i in range(5):
heapq.heappush(a,[random.randint(0,10),chr(random.randint(97,97+26))])
while a:
print(heapq.heappop(a))
[0, 'k']
[4, 'd']
[4, 'l']
[5, 'c']
[7, 'o']
das ist alles. Ich mag Python, weil ich mich dadurch gut fühle, aber ich mag es nicht, weil ich manchmal Unfälle bekomme (Widerspruch).
Recommended Posts