Seite 1 von 1
Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 09:12
von bjoernh
Hallo,
Ich habe eine Liste von strings:
und ordne den Einträgen ganze Zahlen zu. Zum Beispiel:
Etwa vermittels my_numbers.sort() erhalte ich eine Ordnung der Zahlen.
Ich möchte jetzt, dass die strings gemäß der Ordnung der Zahlen geordnet werden. Also im obigen Beispiel will ich erhalten:
:K
Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 09:19
von Rebecca
Code: Alles auswählen
>>> s = ["spam", "ham", "eggs"]
>>> t = [3, 2, 1]
>>>
>>> sorted_list = [i[1] for i in sorted(zip(t, s))]
>>> print sorted_list
['eggs', 'ham', 'spam']
Wobei ich darueber nachdenken wurde, lieber eine Liste von Tupel statt zwei separater Listen zu speichern, wenn die Daten zusammengehoeren!
Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 09:27
von bjoernh
Danke

Ich bin blutiger Anfänger, aber ich schau mir mal an, was Tupel überhaupt machen. Aus der Mathematik hab ich im Kopf Menge mit fester Reihenfolge

Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 09:42
von BlackJack
@bjoernh: Stimmt fast -- im Gegensatz zu Mengen kann man einen Wert mehrfach in einem Tupel haben.
Man kann Tupel auch ganz grob als unveränderbare Listen auffassen.
Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 11:47
von Hyperion
Wäre das nicht eher ein Einsatz für ein Dictionary? Das Wort "Zuordnung" impliziert das ja geradezu. Für die Sortierung gibts ja durchaus workarounds oder ggf. ab 2.7 (oder 3.x) auch das OrderedDict.
Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 13:23
von bords0
Hyperion hat geschrieben:Wäre das nicht eher ein Einsatz für ein Dictionary? Das Wort "Zuordnung" impliziert das ja geradezu. Für die Sortierung gibts ja durchaus workarounds oder ggf. ab 2.7 (oder 3.x) auch das OrderedDict.
Ggü. der der Variante mit einer Liste von Tupeln erhält man die Einschränkung, dass die Strings alle untereinander verschieden sein müssen. (Außerdem geht die ursprüngliche Reihenfolge verloren; z.B. ist die Sortierung dann nicht mehr stable.)
Zur Abwechslung mal eine Variante ohne zip:
Code: Alles auswählen
s = ["spam", "ham", "eggs"]
t = [3, 2, 1]
comes_from = sorted(range(len(t)), key=t.__getitem__)
sorted_list = [s[i] for i in comes_from]
Re: Liste aus Strings bezüglich Liste aus Zahlen ordenen?
Verfasst: Mittwoch 30. Juni 2010, 14:41
von DasIch
Hyperion hat geschrieben:Für die Sortierung gibts ja durchaus workarounds oder ggf. ab 2.7 (oder 3.x) auch das OrderedDict.
Ein OrderedDict kann man nicht sortieren, eine Liste mit Tupeln ist daher angebrachter.