Listen in Beziehung sortieren

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
hallo02
User
Beiträge: 6
Registriert: Dienstag 3. März 2009, 12:52

Hallo Leute

Ich habe 4 Listen die in einer Beziehung stehen..
Nun möchte ich die erste nach ABC sortieren, folglich sollten die drei anderen gleich sortiert werden. (Also das die Beziehung wieder stimmt)

Hat jemand eine Idee?
Vielen Dank.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Code: Alles auswählen

>>>help(sorted)
>>>import operator
>>>help(operator.itemgetter)
Im Forum kannst du auch Beispiele dazu finden.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

du solltest diese beziehungen bei der wahl der datenstruktur berücksichtigen.
4 listen sind hier wahrscheinlich nicht das richtige, sondern eher ein dictionary dessen items listen/tupel der länge 4 sind.
http://www.kinderpornos.info
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Oder du implementierst einen eigenen Sortieralgorithums - dann kannst du die anderen drei Listen ja immer schön mitführen ... :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man kann auch einfach die Listen ``zip()``pen, sortieren, un``zip()``pen (unsplicen).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hallo02
User
Beiträge: 6
Registriert: Dienstag 3. März 2009, 12:52

Hätte mir jemand ein Beispiel wenn ich 4 Listen habe?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

langs = ["Python", "Haskell", "Scheme", "Clojure", "Scala"]
r = range(5)
colors = ["green", "blue", "yellow", "orange", "black"]
powers = [2**i for i in r]
res = sorted(zip(langs, r, colors, powers))
#langs = [e[0] for e in res]
#r = [e[1] for e in res]
#colors = [e[2] for e in res]
#powers = [e[3] for e in res]
langs, r, colors, powers = zip(*res)
Irgendwie sind die letzten vier Zeilen etwas redundant, da ist mir auf die schnelle keine bessere Lösung eingefallen.

Edit: Bessere Lösung gefunden. Da kommen zwar Tupel raus, aber was solls..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Wenn hallo02 unbedingt Listen haben möchte, geht indem man die letzte Zeile so schreibt:

Code: Alles auswählen

langs, r, colors, powers = map(list, zip(*res))
Antworten