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:

Code: Alles auswählen

my_list = ["hi1", ...., "hi10"]
und ordne den Einträgen ganze Zahlen zu. Zum Beispiel:

Code: Alles auswählen

my_numbers = [1,10,2,9,3,8,4,7,5,6]
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:

Code: Alles auswählen

my_sorted_list = ["hi1", "hi3","hi5",...,"hi2"]
: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.