Seite 1 von 1

Speziellen String in Liste konvertieren

Verfasst: Freitag 10. Oktober 2008, 20:35
von OnkelHotte
EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...

Verfasst: Freitag 10. Oktober 2008, 20:41
von BlackJack

Code: Alles auswählen

In [200]: s = '[["a1","a2","a3"],["b1","b2","b3"],["c1","c2","c3"]]'

In [201]: [x[1:-1].split('","') for x in s[2:-2].split('],[')]
Out[201]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]
Edit: Ich hoffe Du hast jetzt nicht einfach `eval()` genommen.

Verfasst: Freitag 10. Oktober 2008, 21:09
von OnkelHotte
Danke für deine schnell Antwort.
Ich vergaß im Übrigen zu erwähnen, dass die doppelten Anführungszeichen HTML-formatiert sind. Deine Lösung hat mich schon sehr viel weiter gebracht.
Ich habe sie folgendermaßen verändert:

[x[1:-1].split('","') for x in s[2:-2].split('"],["')]

dadurch erhalte ich immerhin folgendes:

[['quot;a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3&quot']]

...etwas merkwürdig wie ich finde.
Beim ersten """ fehlt das erste Zeichen (&), beim letzten das letzte (; )... :shock:

Verfasst: Freitag 10. Oktober 2008, 21:36
von BlackJack
Wenn Du das merkwürdig findest, solltest Du das Tutorial aus der Dokumentation durcharbeiten, mit speziellem Augenmerk auf "slicing" bei Zeichenketten.

Ansonsten könnte man auch als ersten Schritt die '"'s durch Anführungszeichen ersetzen:

Code: Alles auswählen

In [208]: [x[1:-1].split('","')
   .....:  for x in s.replace('"', '"')[2:-2].split('],[')]
Out[208]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]
Du solltest auf jeden Fall den ganzen Ausdruck mal in einer Python-Shell Schritt für Schritt aufbauen und Dir die ganzen Zwischenergebnisse anschauen.

Verfasst: Sonntag 12. Oktober 2008, 18:00
von OnkelHotte
Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)

Re: Speziellen String in Liste konvertieren

Verfasst: Sonntag 12. Oktober 2008, 20:18
von Pekh
OnkelHotte hat geschrieben:EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
Das ist doof. Ich kann durchaus nachvollziehen, daß man manchmal einen vielleicht nicht ganz so gelungenen Beitrag ungeschehen machen möchte, aber letztlich hilfst du damit niemandem weiter. Bedenke, daß vielleicht auch andere irgendwann mal diese Frage haben könnten und über die Suchfunktion auf deinen Beitrag stoßen würden. Im Moment können sie nicht mehr erkennen, daß es sich mal um "ihre" Frage (konkrete Problemstellung) gehandelt hat und müssen sie erneut stellen. Schön ist anders.

Verfasst: Dienstag 14. Oktober 2008, 00:25
von __marcus__
OnkelHotte hat geschrieben:Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)
Bist Du der ps.de-OnkelHotte?

Re: Speziellen String in Liste konvertieren

Verfasst: Dienstag 14. Oktober 2008, 06:56
von Hyperion
OnkelHotte hat geschrieben:Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
Scheinbar gefällt mir :-D

Verfasst: Freitag 17. Oktober 2008, 09:30
von sma
Übrigens: Wenn garantiert werden kann, dass in dem String `s` nichts böses steht, reicht bei dem Format doch ein `eval`, um das in eine Python-Liste von Listen mit Strings zu verwandeln.

Wenn man's nicht garantieren kann, aber Python 2.6 hat, kann das Modul `ast` mit `ast.literal_eval()` eine elegante Lösung sein.

Stefan