Liste in neue Liste konvertieren

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

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
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

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
Alles wird gut ;-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

>>> a = ['s71,s80', 's79']
>>> reduce(lambda l, i: l + i.split(','), a, [])
['s71', 's80', 's79']
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
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(','))
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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:
Antworten