python 3.7.3
Verwenden Sie Prioritätswarteschlangen mit Python. Ich möchte es ein wenig anwenden, zum Beispiel meine eigenen Objekte sortieren.
Wird auch als Prioritätswarteschlange bezeichnet. Die zu verwendende Szene ist, wenn Sie sortieren möchten, während sich die Anzahl der Elemente ändert. Oder wenn Sie der Liste ein Element hinzufügen möchten, während Sie es sortiert halten.
Da verschiedene andere Personen Referenzartikel geschrieben haben, werde ich die Details weglassen. (https://qiita.com/ell/items/fe52a9eb9499b7060ed6)
Versuchen Sie, Objekte der Name-Klasse mit zwei Attributen, Vorname und Nachname, nach verschiedenen Bedingungen zu sortieren.
Generieren Sie zunächst die folgende Klasse als Basis.
class Name(object):
def __init__(self,first_name,last_name):
self.first_name = first_name
self.last_name = last_name
def __lt__(self,other):
return other.first_name > self.first_name
def __repr__(self):
return self.first_name + " " + self.last_name
Das Herzstück dieser Zeit ist eine spezielle Methode namens lt. Sie können festlegen, was es bedeutet, kleiner als Sie zu sein. (Es gibt auch viele andere spezielle Methoden. Bitte probieren Sie sie aus. https://blog.codecamp.jp/python-class-code)
Lassen Sie uns tatsächlich mit heapq sortieren.
from heapq import heapify,heappush,heappop
name1 = Name("james","smith")
name2 = Name("john","johnson")
name3 = Name("robert","williams")
name4 = Name("michael","brown")
name5 = Name("william","jones")
name6 = Name("david","brown")
name7 = Name("james","miller")
name8 = Name("david","davis")
name_list = [name1,name2,name3,name4,name5,name6,name7,name8]
heapify(name_list)
for i in range(len(name_list)):
print(heappop(name_list))
Weitere Informationen zur Verwendung von heapq finden Sie im offiziellen Dokument. → https://docs.python.org/ja/3/library/heapq.html
Klicken Sie hier für Ausführungsergebnisse david brown david davis james miller james smith john johnson michael brown robert williams william jones
Da die Methode lt so eingestellt ist, dass die Größe nur anhand des Vornamens beurteilt wird, können Sie sehen, dass die Vornamen in aufsteigender Reihenfolge angeordnet sind.
Versuchen Sie als Übung, zuerst nach dem Vornamen und dann nach dem Nachnamen in die entgegengesetzte Richtung zu sortieren. Die erwartete Ausgabe ist:
david davis david brown james smith james miller john johnson michael brown robert williams william jones
Die Vornamen sind in aufsteigender Reihenfolge angeordnet, die Nachnamen jedoch in absteigender Reihenfolge. Im folgenden Code finden Sie eine Beispielimplementierung.
class Name(object):
def __init__(self,first_Name,last_Name):
self.first_Name = first_Name
self.last_Name = last_Name
def __lt__(self,other):
if other.first_Name == self.first_Name:
return other.last_Name < self.last_Name
else:
return other.first_Name > self.first_Name
def __repr__(self):
return self.first_Name +" "+ self.last_Name
from heapq import heapify,heappush,heappop
name1 = Name("james","smith")
name2 = Name("john","johnson")
name3 = Name("robert","williams")
name4 = Name("michael","brown")
name5 = Name("william","jones")
name6 = Name("david","brown")
name7 = Name("james","miller")
name8 = Name("david","davis")
name_list = [name1,name2,name3,name4,name5,name6,name7,name8]
heapify(name_list)
for i in range(len(name_list)):
print(heappop(name_list))
Danke, dass du bis zum Ende zugesehen hast Wenn Sie möchten, bitte LGTM (sieht gut aus für mich) Wenn Sie einen Fehler machen, weisen Sie bitte darauf hin.
Recommended Posts