Seite 1 von 1
Zweites Argument beim Sortieren von Listen
Verfasst: Dienstag 10. Januar 2012, 21:26
von microkernel
Hallo,
ich habe folgendes Problem. Ich habe eine Liste von Objekten mit den Eigenschaften "dist" und "degree". Nun möchte ich diese Liste nach den geringsten "dist" Wert sortieren. Das mache ich wie üblich so:
Wenn aber nun die "dist" Werte von zwei Objekten gleich ist, soll das Objekt höher platziert werden, welches den höhere "degree" Wert hat.
Nun lautet meine Frage, wie ich das umsetzten kann(?)
Viele Grüße,
microkernel
Re: Zweites Argument beim Sortieren von Listen
Verfasst: Dienstag 10. Januar 2012, 21:31
von pillmuncher
zB. so:
oder so:
je nachdem, was "höher platziert" bedeutet.
Re: Zweites Argument beim Sortieren von Listen
Verfasst: Dienstag 10. Januar 2012, 21:31
von nomnom
Mit dem `cmp`-Argument von list.sort.
Code: Alles auswählen
>>> a = [(1,3),(1,2)]
>>> a.sort(cmp=lambda x, y: 1 if x[0] > y[0] else 1 if x[0] == y[0] and x[1] > y[1] else 0 if x == y else -1)
>>> a
[(1, 2), (1, 3)]
>>>
Edit: Pillmunchers Lösung ist besser.

Re: Zweites Argument beim Sortieren von Listen
Verfasst: Dienstag 10. Januar 2012, 22:24
von /me
nomnom hat geschrieben:Mit dem `cmp`-Argument von list.sort.

Bitte nicht
cmp, denn das muss bei jedem Vergleich der für die Sortierung notwendig ist ausgewertet werden.
key wird nur einmal ermittelt. Python 3.x kennt
cmp auch gar nicht mehr als möglichen Keyword-Parameter.
Re: Zweites Argument beim Sortieren von Listen
Verfasst: Dienstag 10. Januar 2012, 23:20
von bords0
microkernel hat geschrieben:Ich habe eine Liste von Objekten mit den Eigenschaften "dist" und "degree". Nun möchte ich diese Liste nach den geringsten "dist" Wert sortieren. Das mache ich wie üblich so:
Wenn aber nun die "dist" Werte von zwei Objekten gleich ist, soll das Objekt höher platziert werden, welches den höhere "degree" Wert hat.
Klassische Aufgabe für attrgetter. Ungetestet:
Re: Zweites Argument beim Sortieren von Listen
Verfasst: Donnerstag 12. Januar 2012, 04:09
von Leonidas
Wollt schon sagen warum keiner den offensichtlichen weg über ``attrgetter`` vorschlägt. Dachte schon das wär ein Thread wo es um die obskurste Lösung geht, problembär-Style
