692 Stimmen

Wie kann ich eine Zeichenfolge in eine Liste von Zeichen aufteilen?

Wie kann ich eine Zeichenfolge in eine Liste von Zeichen aufteilen? str.split funktioniert nicht.

"foobar"        ['f', 'o', 'o', 'b', 'a', 'r']

16 Stimmen

In Python sind Zeichenketten bereits Arrays von Zeichen für alle Zwecke außer der Ersetzung. Sie können sie zerschneiden, Elemente per Index referenzieren oder nachschlagen, usw.

5 Stimmen

0 Stimmen

見る stackoverflow.com/questions/743806 für die Aufteilung der Zeichenkette in Wörter.

25voto

Alexey Milogradov Punkte 1398

Ich habe zwei weitere Möglichkeiten zur Bewältigung dieser Aufgabe untersucht. Das könnte für jemanden hilfreich sein.

Die erste ist einfach:

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

Und die zweite verwendet map y lambda Funktion. Sie kann für komplexere Aufgaben geeignet sein:

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

Zum Beispiel

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

見る Python-Dokumente für weitere Methoden

25voto

vaultah Punkte 40095

Die Aufgabe besteht darin, über die Zeichen der Zeichenkette zu iterieren und sie in einer Liste zu sammeln. Die naivste Lösung würde wie folgt aussehen

result = []
for character in string:
    result.append(character)

Natürlich kann man es auch abkürzen und nur

result = [character for character in string]

aber es gibt auch kürzere Lösungen, die das Gleiche bewirken.

list Konstruktor kann verwendet werden, um jede iterierbar (Iteratoren, Listen, Tupel, Strings usw.) in eine Liste.

>>> list('abc')
['a', 'b', 'c']

Das große Plus ist, dass es sowohl in Python 2 als auch in Python 3 gleich funktioniert.

Außerdem kann ab Python 3.5 (dank der großartigen PEP 448 ) ist es nun möglich, eine Liste aus einer beliebigen Iterablen zu erstellen, indem man sie in ein leeres Listenliteral entpackt:

>>> [*'abc']
['a', 'b', 'c']

Dies ist übersichtlicher und in einigen Fällen effizienter als der Aufruf von list Konstruktor direkt.

Ich würde von der Verwendung von map -basierten Ansätzen, denn map tut no in Python 3 eine Liste zurückgeben. Siehe Verwendung von Filter, Map und Reduce in Python 3 .

19voto

split() Die eingebaute Funktion trennt den Wert nur auf der Grundlage einer bestimmten Bedingung, aber in einem einzigen Wort kann sie die Bedingung nicht erfüllen. Das Problem kann also mit Hilfe der folgenden Methode gelöst werden list() . Es ruft intern das Array auf und speichert den Wert auf der Grundlage eines Arrays.

Angenommen,

a = "bottle"
a.split() // will only return the word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']

17voto

enbermudas Punkte 1501

Packen Sie sie aus:

word = "Paralelepipedo"
print([*word])

11voto

Gary02127 Punkte 4480

So teilen Sie eine Zeichenkette s ist es am einfachsten, sie an list() . Also,

s = 'abc'
s_l = list(s) #  s_l is now ['a', 'b', 'c']

Sie können auch ein Listenverständnis verwenden, das zwar funktioniert, aber nicht so prägnant ist wie das oben beschriebene:

s_l = [c for c in s]

Es gibt auch noch andere Möglichkeiten, aber diese sollten ausreichen. Wenn Sie sie später neu kombinieren wollen, genügt ein einfacher Aufruf von "".join(s_l) gibt Ihre Liste in ihrer ganzen früheren Pracht als Zeichenkette wieder...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X