HOWTO · Python
Eine Zeichenkette in Python in eine Liste umwandeln
Erfahre, wann du list(), split(), ast.literal_eval() oder List Comprehensions verwendest, um Python-Zeichenketten in Zeichen, Wörter, getrennte Werte oder geprüfte Listendaten umzuwandeln.
Auf dieser Seite
Wähle die Methode danach aus, was jedes Element der Ergebnisliste sein soll. Verwende list(text) für je ein Element pro Zeichen, text.split() für Wörter oder durch Trennzeichen abgegrenzte Werte, ast.literal_eval(text) für vertrauenswürdigen Text, der bereits ein Python-Literal darstellt, und eine List Comprehension, um Elemente zu filtern oder umzuwandeln. Verwende eval() nicht für Eingaben, die du nicht vollständig kontrollierst: Damit kann beliebiger Python-Code ausgeführt werden.
Eine Zeichenkette mit list() in Zeichen umwandeln
list() durchläuft eine Zeichenkette und erzeugt für jeden Unicode-Codepoint ein Element. Die Funktion zerlegt einen Satz nicht in Wörter. Ein kombinierender Akzent kann beispielsweise ein eigener Codepoint sein, auch wenn er optisch mit einem Buchstaben verbunden erscheint.
text = "Hello"
characters = list(text)
print(characters)
Das eignet sich für die Verarbeitung einzelner Zeichen. Leerzeichen und Satzzeichen sind ebenfalls enthalten; wenn du sie entfernen oder verändern möchtest, musst du das ausdrücklich tun.
Wörter oder getrennte Werte mit split() aufteilen
Rufe split() ohne Argument auf, um Wörter an Folgen von Leerraumzeichen zu trennen. Führende und nachgestellte Leerraumzeichen werden ignoriert; mehrere Leerzeichen, Tabulatoren oder Zeilenumbrüche gelten jeweils als ein Trennzeichen.
sentence = "Convert this string to a list"
words = sentence.split()
print(words)
Verwendet die Eingabe ein bekanntes Trennzeichen, übergib es ausdrücklich. Sind Leerzeichen um kommagetrennte Felder erlaubt, entferne sie nach dem Aufteilen an den Rändern jedes Feldes:
text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)
Bei einem ausdrücklich angegebenen Trennzeichen bleiben leere Felder erhalten: "red,,blue".split(",") enthält zwischen den Kommas eine leere Zeichenkette. Fehlt das Trennzeichen, wird die ursprüngliche Zeichenkette als einziges Element zurückgegeben. Mit maxsplit begrenzt du, wie oft geteilt wird; "red,green,blue".split(",", maxsplit=1) lässt green,blue gemeinsam im zweiten Element.
split() ist kein CSV-Parser. Wenn Felder Trennzeichen in Anführungszeichen enthalten können, etwa bei "red, bright",blue, verwende das Python-Modul csv, damit die Regeln für Anführungszeichen korrekt berücksichtigt werden.
Text parsen, der bereits eine Liste darstellt
Wenn der Text bereits die Python-Literalsyntax verwendet, etwa "[1, 2, 3]", kannst du ihn mit ast.literal_eval() parsen. Die Funktion akzeptiert Literalwerte und Container, wertet aber keine beliebigen Ausdrücke aus. Der Text muss trotzdem syntaktisch gültig sein; fehlerhafte Eingaben können ValueError oder SyntaxError auslösen.
import ast
text = "[1, 2, 3]"
values = ast.literal_eval(text)
if isinstance(values, list):
print(values)
else:
print("The parsed value is not a list")
Ein erfolgreiches Parsen garantiert nicht, dass das Ergebnis eine Liste ist: "(1, 2)" stellt zum Beispiel ein Tupel dar. Prüfe den Typ des geparsten Werts, bevor du ihn als Liste verwendest, und behandle Parsefehler, wenn die Eingabe variieren kann. Verwende für JSON-Text json.loads(), denn JSON und die Python-Literalsyntax sind zwar ähnlich, aber nicht identisch. Behandle die Eingabe als Daten und ersetze ast.literal_eval() niemals durch eval(), wenn der Text nicht vollständig kontrolliert ist.
Elemente mit einer Comprehension umwandeln oder filtern
Eine Comprehension kann beim Erstellen der Ergebnisliste eine Bedingung oder Umwandlung anwenden. Das folgende Beispiel behält nur Ziffernzeichen:
text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)
Du kannst die behaltenen Zeichen auch umwandeln, etwa mit [char.lower() for char in text if char.isalpha()]. Eine Comprehension durchläuft die Zeichen der Zeichenkette. Wenn du Wörter verarbeiten möchtest, rufe zuerst split() auf und wende die Comprehension anschließend auf die Wortliste an.
Die passende Methode wählen
- Verwende
list(text), wenn jedes Zeichen ein eigenes Element sein soll. - Verwende
text.split()für durch Leerraum getrennte Wörter odertext.split(separator)für einfache Felder mit einem einheitlichen Trennzeichen. - Verwende
ast.literal_eval()nur für Eingaben, die Python-Literaldaten darstellen sollen; prüfe den Ergebnistyp und behandle fehlerhaften Text. - Verwende
json.loads()für JSON und das Python-Modulcsvfür CSV-Felder mit Anführungszeichen. - Verwende eine Comprehension, wenn Elemente zusätzlich gefiltert oder umgewandelt werden sollen.
Kläre zuerst, welche Eigenschaften das Eingabeformat garantiert. Prüfe den Ergebnistyp und erforderliche Felder an der Grenze, an der externer Text in dein Programm gelangt, und melde fehlerhafte Daten so, dass der aufrufende Code damit umgehen kann.