Seite 1 von 1
Liste sortieren
Verfasst: Donnerstag 11. Oktober 2007, 12:30
von 3D-Operator
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.
Re: Liste sortieren
Verfasst: Donnerstag 11. Oktober 2007, 12:41
von CM
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
Verfasst: Donnerstag 11. Oktober 2007, 12:41
von The Spirit
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.
Verfasst: Donnerstag 11. Oktober 2007, 12:43
von lutz.horn
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]']
Verfasst: Donnerstag 11. Oktober 2007, 13:00
von BlackJack
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]']
Verfasst: Donnerstag 11. Oktober 2007, 13:11
von lutz.horn
Wieder etwas gelernt

Verfasst: Montag 22. Oktober 2007, 12:37
von 3D-Operator
Vielen Dank es hat funktioniert
Ja ich war mir sicher dass es Strings sind, das Programm Maya liefert die Daten so!!