Und wieder habe ich eine Anfängerfrage, bei der ich selbst mit Google nicht wirklich weiterkomme.
Ich habe eine Liste mit Objekten, jeweils mit zwei Zahlen a und b. Diese Liste möchte ich nun sortieren und zwar zuerst nach a und falls die zwei a von zwei Objekten gleich ist, soll b die Entscheidung fällen.
Zur Zeit sortiere ich die Liste mit einem key, jedoch nur nach a. Nun gibt es ja mehrere Möglichkeiten, entweder mache ich es mit einer while schlaufe in dem ich dann alle elemente mit a == a nochmals vergleiche (was je nach Anzahl von Objekten zu sehr vielen Schlaufendurchgängen führen würde) oder ich mache es über eine key funktion die irgendwie zwei Objekte vergleicht, was ich aber noch nicht ganz begriffen habe, denn über key kann man ja nur ein Element jeweils ausgeben (Das hier verstehe ich nicht ganz).
Nun die erste Version ist sicher machbar, jedoch muss mein Script in naher Zukunft viele Zahlen-Objekte vergleichen, was sehr lange dauren könnte und die Version mit key wäre wohl eleganter.
Hier mein Code:
Code: Alles auswählen
#Sortieren von Objekten in einer Liste anhand von zwei Attributen
class Numbers(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __lt__(self, other):
if self.a == other.a:
if self.b < other.b:
return True
elif self.b > other.b:
return False
else:
print("Beide haben die gleichen Werte!!!")
return True
elif self.a < other.a:
return True
else:
return False
def sort(liste):
#Sortiert die Liste anhand des Attributes a, sollte aber b auch einbeziehen!
liste.sort(key= lambda t: t.a, reverse=True)
def new(a, b, liste):
new_number = Numbers(a, b)
liste.append(new_number)
def show(liste):
for i in liste:
print(i.a, " ", i.b)
#Hauptprogramm mit ein paar Beispielwerten als Test
li = []
new(10, 12, li)
new(13, 13, li)
new(10, 11, li)
new(10, 14, li)
new(10, 11, li)
print("Unsortierte Liste:")
show(li)
print("Nun sortiert:")
sort(li)
show(li)
Sorry für die Anfängerfrage, aber ich versuche nun seit zwei Tagen eine gute Lösung zu finden...
Grüsse
angwedh