Come convertire una stringa con elementi delimitati da virgole in un elenco in Python?


140

Come si converte una stringa in un elenco?

Dì che la stringa è come text = "a,b,c". Dopo la conversione, text == ['a', 'b', 'c']e, si spera text[0] == 'a', text[1] == 'b'?


2
ciao, l'ho fatto così, list (stringObject.split (','))
Günay Gültekin,

Risposte:


205

Come questo:

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

In alternativa, puoi usarlo eval()se ritieni che la stringa sia sicura:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')

@Clinteney: nessun problema ;-) Potresti anche voler esaminare picklese stai persistendo oggetti nelle stringhe.
Cameron,

2
Questo non è un array, è un elenco, gli array rappresentano valori di base e si comportano in modo molto simile agli elenchi, tranne per il fatto che il tipo di oggetti in essi memorizzati è vincolato.
joaquin,

8
Promemoria amichevole: non usare eval, anche se ritieni che la stringa sia sicura. Non vale il potenziale rischio per la sicurezza per qualcosa di più che script personali e armeggiare in una shell interattiva.
A. Wilson,

3
eval ('[' + text + ']') tratterà a, b, c come variabili, non come stringa.
phaibin,

1
Sottovalutato perché le due soluzioni proposte fanno cose completamente diverse, e questo non è spiegato in alcun modo nel testo della risposta. Sebbene la domanda in sé non sia veramente chiara, nella risposta dovrebbe essere chiarito che le due soluzioni non sono alternative equivalenti, ma interpretazioni diverse della domanda.
Matteo Italia,

179

Solo per aggiungere alle risposte esistenti: si spera che in futuro incontrerai qualcosa di più simile a questo:

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

Ma quello con cui hai a che fare in questo momento , vai con la risposta di @ Cameron .

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

4
Anche se concordo con te sul fatto che la risposta di @ Cameron sia stata la risposta "proprio ora", penso che la tua completezza renda questa la risposta più corretta. Raramente ci vengono date stringhe separate da virgole nel mondo reale ed è bene sapere come convertire in un elenco indipendentemente dal formato.
TristanZimmerman,

39

Il seguente codice Python trasformerà la tua stringa in un elenco di stringhe:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)

3
Possono anche usare jsonad esempio:json.loads(teststr)
Mohammad Nazari

24

Non penso che tu debba farlo

In Python raramente devi convertire una stringa in un elenco, perché stringhe ed elenchi sono molto simili

Cambiare il tipo

Se hai davvero una stringa che dovrebbe essere una matrice di caratteri, fai come segue:

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

Non cambiare il tipo

Nota che le stringhe sono molto simili agli elenchi in Python

Le stringhe hanno accessori, come gli elenchi

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

Le stringhe sono iterabili, come le liste

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

TLDR

Le stringhe sono elenchi. Quasi.


8

Nel caso in cui desideri dividere per spazi, puoi semplicemente usare .split():

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

Produzione:

['mary', 'had', 'a', 'little', 'lamb'] 

Questo produce ciò che è tra (), cioè niente.
Anthon,

7

Se vuoi effettivamente array:

>>> 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'

Se non hai bisogno di array e vuoi solo guardare i tuoi caratteri in base all'indice, ricorda che una stringa è iterabile, proprio come un elenco tranne il fatto che è immutabile:

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'

1
Per curiosità, dopo aver fatto myarray = array ('c', testo), dove è finita la "c"? poiché se si digita array, si ottiene array ("c", "abc"), ma a [0] == a? Grazie
Clinteney Hui il

@Clinteney: "c" significa "crea una matrice di caratteri". Vedi i documenti per maggiori informazioni
Cameron,

Ho votato, ma troppo presto. Ottengo array ('c', '1 1 91 0,001 228') quando chiamo a = array ('c', e) dove e = "1 1 91 0,001 228"
Valentin Heinitz,

@ValentinHeinitz Sì, è quello che devi ottenere come mostrato nel mio esempio. Cosa ti aspetti ?
Joaquin,

1
@joaquin: Ok, ho capito. Va bene con la risposta. Ero confuso dalla domanda "text == [a, b, c]" dovrebbe essere "text == ['a', 'b', 'c']"
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]]

Fornisci alcune informazioni aggiuntive insieme al tuo codice in modo che il poster originale possa capire meglio come questo risolve il suo problema.
Ivan

4

Tutte le risposte sono buone, c'è un altro modo di fare, che è la comprensione dell'elenco, vedere la soluzione di seguito.

u = "UUUDDD"

lst = [x for x in u]

per l'elenco separato da virgole, procedi come segue

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

lst = [x for x in u.split(',')]

Non capisco la linea singola per i loop e non lo farò mai
Mr PizzaGuy

1
@MrPizzaGuy è facile e molto utile quando lo usi, controlla questo youtube.com/watch?v=AhSvKGTh28Q
waghydjemy

1

Di solito uso:

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

gli stripspazi intorno rimuovere parole.


1

Per convertire un codice stringavente il modulo che a="[[1, 3], [2, -6]]"ho scritto ma non ottimizzato:

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

0
# to strip `,` and `.` from a string ->

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

È necessario utilizzare il translatemetodo integrato per le stringhe.

Digitare help('abc'.translate)nella shell Python per ulteriori informazioni.


0

Utilizzando Python funzionale:

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

0

Esempio 1

>>> email= "myemailid@gmail.com"
>>> email.split()
#OUTPUT
["myemailid@gmail.com"]

Esempio 2

>>> email= "myemailid@gmail.com, someonsemailid@gmail.com"
>>> email.split(',')
#OUTPUT
["myemailid@gmail.com", "someonsemailid@gmail.com"]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.