sort, Python 2.3.5 und key Problem

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
Benutzeravatar
_johannes
User
Beiträge: 20
Registriert: Montag 19. Juni 2006, 17:37

Hallo,

Ich habe folgendes Problem:
Ich habe mit ziemlichen Aufwand ein Python-Skript geschrieben, hier bei mir auf dem Mac (Python 2.5).
Das fertige Skript soll nun aber auf einem alten Linux-Rechner laufen, auf dem nur Python 2.3.5 läuft.
Dummerweise habe ich als relativer Python- und Programmier-Neuling nicht auf Abwärtskompatibilität geachtet :-(.
In meinem Skript kommt eine Funktion vor, die einen key-Parameter definiert, mit dem ich anschließend sortiere. Das geht, wie ich gerade ergoogelt habe, aber erst ab Python 2.4.
Nun,...
die Fehlermeldung des Linux-Rechners ist mir nun klar, aber noch nicht, wie ich die entsprechende Funktion umschreiben muss, damit dass ganze auch unter 2.3.5 läuft.

Um diesen Abschnitt handelt es sich (Sinn:verschachtelte Liste (list) intern sortieren nach dem jeweils 4.Element der in der umgebenden Liste aufgeführten Unterlisten(t)):

Code: Alles auswählen

def viertes(t):
 return [t[4]]
 
liste.sort(key=viertes)
Danke für Eure Hilfe.
_johannes
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

foo.sort(key=func)
kannst du auch schreiben als

Code: Alles auswählen

foo.sort(lambda a, b: cmp(func(a), func(b)))
TUFKAB – the user formerly known as blackbird
Benutzeravatar
_johannes
User
Beiträge: 20
Registriert: Montag 19. Juni 2006, 17:37

Danke für die schnelle Antwort,

aber leider kapiere ich's noch nicht. Kannst Du mir auf die Sprünge helfen?
cmp vergleicht doch hier zwei Funktionen, aber ich habe doch nur eine?!?
Ich kann auch vorher nicht festlegen wieviele Unterlisten in der übergeordneten Liste stehen. Ist das evtl. ein Problem?

Gruss,
_johannes
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

nein nein... du hast nicht zwei funktionen, sondern zweimal die gleich funktion mit unterschiedlichen argumenten... du gehst sozusagen die liste zur sortierung nacheinander durch...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

blackbird hat geschrieben:

Code: Alles auswählen

foo.sort(key=func)
kannst du auch schreiben als

Code: Alles auswählen

foo.sort(lambda a, b: cmp(func(a), func(b)))
Was allerdings nicht dasselbe ist, weil es in ungünstigen Fällen mehr Aufrufe von func() benötigt. Besser ist dann

Code: Alles auswählen

foo = [(func(x), x) for x in foo]
foo.sort()
foo = [x[1] for x in foo]
-- auch bekannt als "decorate-sort-undecorate"-Pattern.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

[wiki]Sortierungs-Tutorium[/wiki] :)
Antworten