@Clinteney: No hay problema ;-) También es posible que desee investigar picklesi persiste los objetos en cadenas.
Cameron
2
Esto no es una matriz, es una lista, las matrices representan valores básicos y se comportan de manera muy similar a las listas, excepto que el tipo de objetos almacenados en ellas está restringido.
joaquin
8
Recordatorio amigable: no use eval, incluso si confía en que la cadena sea segura. No vale la pena el riesgo de seguridad potencial para nada más que scripts personales y violín en un shell interactivo.
A. Wilson
3
eval ('[' + text + ']') tratará a, b, c como variables, no como cadenas.
Phaibin
1
Voto negativo porque las dos soluciones propuestas hacen cosas completamente diferentes, y esto no se explica de ninguna manera en el texto de respuesta. Si bien la pregunta en sí no es realmente clara, debe quedar claro en la respuesta que las dos soluciones no son alternativas equivalentes, sino interpretaciones diferentes de la pregunta.
Matteo Italia
179
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 lidiando ahora , ve con la respuesta de @ Cameron .
>>> word ='a,b,c'>>> L = word.split(',')>>> L['a','b','c']>>>','.join(L)'a,b,c'
Aunque estoy de acuerdo con usted en que la respuesta de @ Cameron fue la respuesta "en este momento", creo que su minuciosidad hace que esta sea la respuesta más correcta. Raramente se nos dan cadenas separadas por comas en el mundo real y es bueno saber cómo convertir a una lista independientemente del formato.
TristanZimmerman
39
El siguiente código de Python convertirá su cadena en una lista de cadenas:
Esto genera lo que hay entre (), es decir, nada en absoluto.
Anthon
7
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 desea mirar por índice a sus caracteres, recuerde que una cadena es iterable, al igual que una lista, excepto el hecho de que es inmutable:
>>> text ="a,b,c">>> text = text.replace(',','')>>> text[0]'a'
Por curiosidad, después de hacer myarray = array ('c', texto), ¿a dónde se fue la "c"? ya que si escribe array, obtendrá array ("c", "abc"), pero a [0] == a? Gracias
Clinteney Hui
@Clinteney: La 'c' significa "crear una matriz de caracteres". Consulte los documentos para obtener más información
Cameron,
He votado a favor, pero demasiado temprano. Obtengo array ('c', '1 1 91 0.001 228') cuando llamo a = array ('c', e) donde e = "1 1 91 0.001 228"
Valentin Heinitz
@ValentinHeinitz Sí, eso es lo que debe obtener como se muestra en mi ejemplo. Qué esperas ?
joaquin
1
@joaquin: Ok, lo tengo. Está bien con la respuesta. Estaba confundido por la pregunta "text == [a, b, c]" debería ser "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]]
Para convertir un archivo que stringtiene el formulario a="[[1, 3], [2, -6]]"que escribí pero aún no está 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
Respuestas:
Me gusta esto:
Alternativamente, puede usar
eval()
si confía en que la cadena es segura:fuente
pickle
si persiste los objetos en cadenas.Solo para agregar a las respuestas existentes: con suerte, encontrará algo más como esto en el futuro:
Pero con lo que estás lidiando ahora , ve con la respuesta de @ Cameron .
fuente
El siguiente código de Python convertirá su cadena en una lista de cadenas:
fuente
json
por ejemplo:json.loads(teststr)
Yo no creo que se necesita para
En python, rara vez necesita convertir una cadena en 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:
No cambiar el tipo
Tenga en cuenta que las cadenas son muy parecidas a las listas en Python
Las cadenas tienen accesores, como listas
Las cadenas son iterables, como listas
TLDR
Las cadenas son listas. Casi.
fuente
En caso de que desee dividir por espacios, puede usar
.split()
:Salida:
fuente
()
, es decir, nada en absoluto.Si realmente quieres matrices:
Si no necesita matrices, y solo desea mirar por índice a sus caracteres, recuerde que una cadena es iterable, al igual que una lista, excepto el hecho de que es inmutable:
fuente
fuente
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.
para la lista separada por comas, haga lo siguiente
fuente
Usualmente uso:
el
strip
eliminar espacios alrededor de las palabras.fuente
Para convertir un archivo que
string
tiene el formularioa="[[1, 3], [2, -6]]"
que escribí pero aún no está optimizado:fuente
Debe usar el
translate
método incorporado para las cadenas.Escriba
help('abc'.translate)
en Python shell para más información.fuente
Usando Python funcional:
fuente
Ejemplo 1
Ejemplo 2
fuente