Seite 1 von 1

Listen-Sortierung mit mehreren Faktoren

Verfasst: Sonntag 8. Juli 2012, 10:56
von raiminator
Hallo,

ich möchte eine Liste in der Form sortieren:

Code: Alles auswählen

L = [
    (0, 25, 4, 17),
    (1, 13, -13, 11),
    (2, 8, -17, 14),
    (3, 13, -8, 14),
    (4, 31, 14, 27),
    ...
]

>>> print sortieren(L)
[
    (4, 31, 14, 27),
    (0, 25, 4, 17),
    (3, 13, -8, 14),
    (1, 13, -13, 11),
    (2, 8, -17, 14),
]
Das ganze soll eine Bundesliga-Tabelle darstellen.
Bei (4, 31, 14, 27) steht
4 für die Vereins-Nummer
31 für die Punkte (erster Sortierfaktor)
14 für die Tordifferenz (bei Punktgleichheit zweiter Sortierfaktor)
27 für die geschossenen Tore (Dritter Sortierfaktor)

Da ich bezweifle dass es für sowas eine eingebaute FUnktion gibt müsste also ein eigener Algorithmus her. Doch wie ich den schreiben sollte, da habe ich halt keine Idee, nicht mal einen Ansatz :/

brauche dringend Hilfe!
Grüße, raiminator

Re: Listen-Sortierung mit mehreren Faktoren

Verfasst: Sonntag 8. Juli 2012, 11:13
von BlackJack
@raiminator: Der Algorithmus ist schon da: `list.sort()`. Du musst nur die passenden Argumente übergeben, nämlich als `key`-Parameter die eine Funktion die einen Eintrag bekommt und daraus einen Sortierschlüssel berechnet. In diesem Fall zum Beispiel einfach ein Tupel mit den drei Werten in der Reihenfolge ihrer Wichtigkeit. So eine Funktion kann man sich von `operator.itemgetter()` geben lassen.

Re: Listen-Sortierung mit mehreren Faktoren

Verfasst: Sonntag 8. Juli 2012, 11:41
von /me
BlackJack hat geschrieben:So eine Funktion kann man sich von `operator.itemgetter()` geben lassen.
Ein lambda mit element[1:] reicht hier schon.

Re: Listen-Sortierung mit mehreren Faktoren

Verfasst: Sonntag 8. Juli 2012, 11:44
von raiminator
@BlackJack: Könntest du mir vllt. ein kleines Codebeispiel geben? So ganz verstehe ich das noch nicht :)
Danke

EDIT: ich glaube ich habs verstanden:

Code: Alles auswählen

key = lambda x: x[1:]
L.sort(None, key)
oder was muss man statt None an sort übergeben?

Re: Listen-Sortierung mit mehreren Faktoren

Verfasst: Sonntag 8. Juli 2012, 12:14
von cofi
Da `None` das default Argument fuer `list.sort` ist: Nichts. Aber `L.sort(key=lambda x: x[1:])` ist die bessere Alternative.