Wie konvertiere ich eine Zeichenfolge mit durch Kommas getrennten Elementen in eine Liste in Python?

140

Wie konvertiert man einen String in eine Liste?

Angenommen, die Zeichenfolge ist wie text = "a,b,c". Nach der Konvertierung text == ['a', 'b', 'c']und hoffentlich text[0] == 'a', text[1] == 'b'?

Clinteney Hui
quelle
2
Hallo, ich habe das so gemacht, list (stringObject.split (','))
Günay Gültekin

Antworten:

205

So was:

>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]

Alternativ können Sie Folgendes verwenden, eval()wenn Sie der Sicherheit der Zeichenfolge vertrauen:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')
Cameron
quelle
@Clinteney: Kein Problem ;-) Vielleicht möchten Sie auch prüfen, pickleob Sie Objekte für Zeichenfolgen beibehalten .
Cameron
2
Dies ist kein Array, sondern eine Liste. Arrays stellen Grundwerte dar und verhalten sich sehr ähnlich wie Listen, außer dass der Typ der darin gespeicherten Objekte eingeschränkt ist.
Joaquin
8
Freundliche Erinnerung: Verwenden Sie eval nicht, auch wenn Sie darauf vertrauen, dass die Zeichenfolge sicher ist. Das potenzielle Sicherheitsrisiko lohnt sich nicht für mehr als persönliche Skripte und das Fummeln in einer interaktiven Shell.
A. Wilson
3
eval ('[' + text + ']') behandelt a, b, c als Variablen, nicht als Zeichenfolge.
Phaibin
1
Abgestimmt, weil die beiden vorgeschlagenen Lösungen völlig unterschiedliche Aufgaben erfüllen und dies im Antworttext in keiner Weise erläutert wird. Während die Frage selbst nicht wirklich klar ist, sollte in der Antwort klargestellt werden, dass die beiden Lösungen keine äquivalenten Alternativen sind, sondern unterschiedliche Interpretationen der Frage.
Matteo Italia
179

Nur um die vorhandenen Antworten zu ergänzen: Hoffentlich werden Sie in Zukunft auf etwas Ähnliches stoßen:

>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'

Aber womit Sie sich gerade beschäftigen , lesen Sie die Antwort von @ Cameron .

>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
Droogans
quelle
4
Obwohl ich Ihnen zustimme, dass die Antwort von @ Cameron die Antwort "im Moment" war, denke ich, dass Ihre Gründlichkeit dies zur korrekteren Antwort macht. In der realen Welt werden selten durch Kommas getrennte Zeichenfolgen ausgegeben, und es ist gut zu wissen, wie man unabhängig vom Format in eine Liste konvertiert.
TristanZimmerman
39

Der folgende Python-Code verwandelt Ihre Zeichenfolge in eine Liste von Zeichenfolgen:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)
Bryan
quelle
3
Sie können jsonzum Beispiel auch verwenden :json.loads(teststr)
Mohammad Nazari
24

Ich glaube nicht, dass du brauchst zu

In Python müssen Sie eine Zeichenfolge selten in eine Liste konvertieren, da Zeichenfolgen und Listen sehr ähnlich sind

Typ ändern

Wenn Sie wirklich eine Zeichenfolge haben, die ein Zeichenarray sein sollte, gehen Sie folgendermaßen vor:

In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']

Typ nicht ändern

Beachten Sie, dass Strings Listen in Python sehr ähnlich sind

Strings haben Accessoren wie Listen

In [3]: x[0]
Out[3]: 'f'

Zeichenfolgen sind wie Listen iterierbar

In [4]: for i in range(len(x)):
...:     print x[i]
...:     
f
o
o
b
a
r

TLDR

Zeichenfolgen sind Listen. Fast.

Firelynx
quelle
8

Wenn Sie nach Leerzeichen teilen möchten, können Sie einfach Folgendes verwenden .split():

a = 'mary had a little lamb'
z = a.split()
print z

Ausgabe:

['mary', 'had', 'a', 'little', 'lamb'] 
Vivek Mishra
quelle
Dies gibt aus, was zwischen den ist (), dh überhaupt nichts.
Anthon
7

Wenn Sie tatsächlich Arrays möchten:

>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'

Wenn Sie keine Arrays benötigen und Ihre Zeichen nur nach Index anzeigen möchten, denken Sie daran, dass eine Zeichenfolge wie eine Liste iterierbar ist, mit der Ausnahme, dass sie unveränderlich ist:

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'
Joaquin
quelle
1
Aus Neugier, nachdem Sie myarray = array ('c', Text) gemacht haben, wohin ging das "c"? denn wenn Sie Array eingeben, haben Sie Array ("c", "abc"), aber a [0] == a? Vielen Dank
Clinteney Hui
@Clinteney: Das 'c' bedeutet "ein Array von Zeichen erstellen". Weitere Informationen finden Sie in den Dokumenten
Cameron
Ich habe gestimmt, aber zu früh. Ich erhalte ein Array ('c', '1 1 91 0.001 228'), wenn ich a = array ('c', e) aufrufe, wobei e = "1 1 91 0.001 228"
Valentin Heinitz
@ValentinHeinitz Ja, das müssen Sie bekommen, wie in meinem Beispiel gezeigt. Was erwartest du ?
Joaquin
1
@joaquin: Ok, ich habe es verstanden. Mit der Antwort ist alles in Ordnung. Ich war verwirrt von der Frage "text == [a, b, c]" sollte "text == ['a', 'b', 'c']" sein
Valentin Heinitz
4
m = '[[1,2,3],[4,5,6],[7,8,9]]'

m= eval(m.split()[0])

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Josué
quelle
Bitte geben Sie einige zusätzliche Informationen zusammen mit Ihrem Code an, damit das Originalplakat besser verstehen kann, wie dies sein Problem löst.
Ivan
4

Alle Antworten sind gut, es gibt eine andere Möglichkeit, nämlich das Listenverständnis, siehe die folgende Lösung.

u = "UUUDDD"

lst = [x for x in u]

Für eine durch Kommas getrennte Liste gehen Sie wie folgt vor

u = "U,U,U,D,D,D"

lst = [x for x in u.split(',')]
Zeus
quelle
Ich verstehe keine einzelne Zeile für Schleifen und werde es nie
tun
1
@ MrPizzaGuy es ist einfach und sehr praktisch, wenn Sie es verwenden, überprüfen Sie diese youtube.com/watch?v=AhSvKGTh28Q
waghydjemy
1

Ich benutze normalerweise:

l = [ word.strip() for word in text.split(',') ]

die stripLeerzeichen um Wörter entfernen.

Yannick Loiseau
quelle
1

So konvertieren Sie einen stringmit dem Formular, das a="[[1, 3], [2, -6]]"ich geschrieben habe, noch nicht optimierten Code:

matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
    row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
    matrixAr.append(row)
print matrixAr
Khalid
quelle
0
# to strip `,` and `.` from a string ->

>>> 'a,b,c.'.translate(None, ',.')
'abc'

Sie sollten das eingebaute verwenden translate Methode für Zeichenfolgen verwenden.

Geben Sie help('abc'.translate)in die Python-Shell ein, um weitere Informationen zu erhalten.

N 1.1
quelle
0

Verwenden von funktionalem Python:

text=filter(lambda x:x!=',',map(str,text))
Eratosthenes
quelle