Seite 1 von 1

Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 12:17
von api
Hallo zusammen,

ich habe mal ne wahrscheinlich wirklich simple Frage - sehe aber den Wald vor lauter Bäumen nicht.

Wie kann ich diese Liste

Code: Alles auswählen

['s71,s80', 's79']
in die folgende Liste umwandeln?

Code: Alles auswählen

['s71', 's80', 's79']
Ich verwende Python 2.6

Ist doch bestimmt simple, oder?

CU,
API

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 12:41
von busfahrer
Hallo
das geht vieleicht auch anders/besser, aber dafür beschäftige ich mich zu wenig mit der Materie

Code: Alles auswählen

liste_1 = ['s71,s80', 's79']
liste_2 = liste_1[0].split(",")
liste_2.append(liste_1[1])
liste_2
['s71', 's80', 's79']
Gruß...busfahrer

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 12:42
von cofi

Code: Alles auswählen

>>> a = ['s71,s80', 's79']
>>> reduce(lambda l, i: l + i.split(','), a, [])
['s71', 's80', 's79']

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 14:12
von api
@cofi: Die Lösung ist genial. So was habe ich gesucht. Danke.

@busfahrer: Danke auch für den Versuch. Da ich aber durchaus Listen mit mehr Elementen habe (hatte ich nicht erwähnt, ok), funktioniert die Lösung von @cofi besser.

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 15:20
von yipyip
Also ich würde ja lieber

Code: Alles auswählen

In [20]: a = ['s71,s80', 's79', 'a12,b23,c34']

In [21]: sum((x.split(',') for x in a), [])
Out[21]: ['s71', 's80', 's79', 'a12', 'b23', 'c34']
sagen. Oder mit etwas erweiterter Funktionalität:

Code: Alles auswählen

In [22]: a = ['s71,s80', 's79', 'a12, b23,  c34  ']

In [23]: [x.strip() for x in sum((x.split(',') for x in a), [])]
Out[23]: ['s71', 's80', 's79', 'a12', 'b23', 'c34']
:wink:
yipyip

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 18:34
von BlackJack
@api: cofi's Lösung ist sicher nicht genial. Genau wie yipyip's mit dem `sum()` haben beide ein besch* Laufzeitverhalten weil das "addieren" von zwei Listen immer eine neue erstellt in die die alten beiden hineinkopiert werden. Das heisst für jedes Element der ursprungsliste wird eine neue Liste erstellt und das Zwischenergebnis unnötig in der Gegeng herum kopiert.

Eine effizientere Lösung wäre eine ganz normale Schleife:

Code: Alles auswählen

result = list()
for item in a_list:
    result.extend(item.split(','))

Re: Liste in neue Liste konvertieren

Verfasst: Mittwoch 2. Februar 2011, 19:06
von cofi
BlackJack hat geschrieben:@api: cofi's Lösung ist sicher nicht genial.
Ich wollte schon dazuschreiben, dass es eher ein Witz war, hab dann gedacht, dass die mangelnde Lesbarkeit genug abschreckt .. dem war wohl nich so :roll: