Listen-Sortierung mit mehreren Faktoren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
raiminator
User
Beiträge: 31
Registriert: Dienstag 1. Mai 2012, 08:06

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
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.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:So eine Funktion kann man sich von `operator.itemgetter()` geben lassen.
Ein lambda mit element[1:] reicht hier schon.
raiminator
User
Beiträge: 31
Registriert: Dienstag 1. Mai 2012, 08:06

@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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Da `None` das default Argument fuer `list.sort` ist: Nichts. Aber `L.sort(key=lambda x: x[1:])` ist die bessere Alternative.
Antworten