Liste 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
3D-Operator
User
Beiträge: 9
Registriert: Donnerstag 11. Oktober 2007, 12:19

Donnerstag 11. Oktober 2007, 12:30

Servus,

ich habe wahrscheinlich ein kleineres Problem mit dem sortieren der Items in einer Liste.

Code: Alles auswählen

tmp=['plane[0]','plane[30]','plane[3]']
tmp.sort()
print tmp
als Ergebnis erzeugt Python die gleiche Reihenfolge.
Gibt es eine Moeglichkeit die Items in der Liste nach den Nummerierungen zu sortieren?

Edit (Leonidas): BBCode aktiviert.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 11. Oktober 2007, 12:41

Hallo und willkommen im Forum,
3D-Operator hat geschrieben: als Ergebnis erzeugt Python die gleiche Reihenfolge.
Gibt es eine Moeglichkeit die Items in der Liste nach den Nummerierungen zu sortieren?
Klar, aber Deine Einträge sind ausschließlich Strings - dann werden sie auch wie Strings sortiert.
Bist Du Dir sicher, daß plane[0] & Co. Strings sein sollen?

Gruß,
Christian
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Donnerstag 11. Oktober 2007, 12:41

tmp ist in deinem beispiel eine liste von strings.
daher wird buchstabe für buchstabe geschaut, ob etwas "ascizeichenmäßig" höher ist. und da in deiner reihe ja dies nicht zutriefft, gibt er es so wieder aus.

oder, willst du eigentlich garnicht nach den strings in deiner liste soriteren sondern die dahinterliegenden values?

dann musst du aber die ' vor und nach der variable weglassen.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Donnerstag 11. Oktober 2007, 12:43

Probier mal etwas in dieser Art:

Code: Alles auswählen

#!/usr/bin/env python

def extract_number(x, y):
    return int(x[x.index("[")+1:x.index("]")])

compare = lambda x, y: extract_number(x).cmp(extract_number(y))

tmp = ['plane[0]','plane[30]','plane[3]']
print tmp
# ['plane[0]', 'plane[30]', 'plane[3]']
tmp.sort(compare)
print tmp
# ['plane[0]', 'plane[3]', 'plane[30]']
https://www.xing.com/go/invite/18513630.6a91d4
BlackJack

Donnerstag 11. Oktober 2007, 13:00

Probier Deine Beispiele mal aus…

Was ist das für ein `y` in `extract_number()`? Und seit wann haben `int`\s eine `cmp()`-Methode?

Und das `key`-Argument ist etwas effizienter als das `cmp`-Argument beim Sortieren.

Code: Alles auswählen

In [153]: tmp = ['plane[0]', 'plane[30]', 'plane[3]']

In [154]: sorted(tmp, key=lambda s: int(s[s.index('[') + 1:s.rindex(']')]))
Out[154]: ['plane[0]', 'plane[3]', 'plane[30]']
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Donnerstag 11. Oktober 2007, 13:11

Wieder etwas gelernt :wink:
https://www.xing.com/go/invite/18513630.6a91d4
3D-Operator
User
Beiträge: 9
Registriert: Donnerstag 11. Oktober 2007, 12:19

Montag 22. Oktober 2007, 12:37

Vielen Dank es hat funktioniert

Ja ich war mir sicher dass es Strings sind, das Programm Maya liefert die Daten so!!
Antworten