¿Cómo convertir una cadena a una lista en Python?

¿Cómo convertir una cadena en una lista?

Digamos que la cadena es como text = "a,b,c" . Después de la conversión, el text == ['a', 'b', 'c'] y con suerte el text[0] == 'a' , el text[1] == 'b' ?

Me gusta esto:

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

Alternativamente, puede usar eval() si confía en que la cadena sea segura:

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

Solo para agregar a las respuestas existentes: con suerte, encontrará algo más como esto en el futuro:

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

Pero con lo que estás tratando ahora mismo , ve con la respuesta de @Cameron.

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

El siguiente código de Python convertirá tu cadena en una lista de cadenas:

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

No creo que necesites

En Python, rara vez se necesita convertir una cadena a una lista, porque las cadenas y las listas son muy similares.

Cambiando el tipo

Si realmente tiene una cadena que debería ser una matriz de caracteres, haga esto:

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

No cambiando el tipo

Tenga en cuenta que las cadenas son muy parecidas a las listas en python

Las cadenas tienen accesores, como listas

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

Las cuerdas son iterables, como listas

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

TLDR

Las cadenas son listas. Casi.

Si realmente quieres matrices:

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

Si no necesita matrices, y solo quiere mirar por el índice a sus caracteres, recuerde que una cadena es un iterable, como una lista, excepto el hecho de que es inmutable:

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

En caso de que desee dividir por espacios, puede usar .split() :

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

Salida:

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

Suelo usar:

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

La strip quita espacios alrededor de las palabras.

Para convertir una string tiene la forma a="[[1, 3], [2, -6]]" Escribí un código aún no optimizado:

 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 
 m = '[[1,2,3],[4,5,6],[7,8,9]]' m= eval(m.split()[0]) [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
 # to strip `,` and `.` from a string -> >>> 'a,b,c.'.translate(None, ',.') 'abc' 

Debe utilizar el método de translate incorporado para cadenas.

Escriba help('abc'.translate) en el shell de Python para obtener más información.

Usando Python funcional:

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

Todas las respuestas son buenas, hay otra forma de hacerlo, que es la comprensión de la lista, vea la solución a continuación.

 u = "UUUDDD" lst = [x for x in u] 

para la lista separada por comas haga lo siguiente

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