@Clinteney: Não há problema ;-) Você também pode querer examinar picklese você persiste objetos em strings.
22411 Cameron
2
Isso não é uma matriz, é uma lista, as matrizes representam valores básicos e se comportam de maneira semelhante às listas, exceto que o tipo de objetos armazenados nelas é restrito.
Joaquin
8
Lembrete amigável: não use eval, mesmo se você confiar que a string é segura. Não vale o risco potencial de segurança para nada além de scripts pessoais e mexer em um shell interativo.
A. Wilson
3
eval ('[' + text + ']') tratará a, b, c como variáveis, não como string.
Phaibin
1
Voto negativo, porque as duas soluções propostas fazem coisas completamente diferentes, e isso não é explicado de forma alguma no texto da resposta. Embora a pergunta em si não seja realmente clara, deve-se esclarecer na resposta que as duas soluções não são alternativas equivalentes, mas interpretações diferentes da pergunta.
Matteo Italia
179
Apenas para adicionar às respostas existentes: espero que você encontre algo mais parecido com isso no futuro:
>>> word ='abc'>>> L = list(word)>>> L
['a','b','c']>>>''.join(L)'abc'
Mas com o que você está lidando agora , siga a resposta de @ Cameron .
>>> word ='a,b,c'>>> L = word.split(',')>>> L
['a','b','c']>>>','.join(L)'a,b,c'
Embora eu concorde com você que a resposta de @ Cameron foi a resposta "agora", acho que sua minúcia faz com que essa seja a resposta mais correta. Raramente, recebemos sequências separadas por vírgula no mundo real e é bom saber como converter em uma lista, independentemente do formato.
TristanZimmerman 19/05
39
O seguinte código Python transformará sua string em uma lista de strings:
>>>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 você não precisa de matrizes e deseja apenas procurar por índice seus caracteres, lembre-se de que uma string é iterável, como uma lista, exceto pelo fato de ser imutável:
>>> text ="a,b,c">>> text = text.replace(',','')>>> text[0]'a'
Por curiosidade, depois de fazer myarray = array ('c', texto), para onde foi o "c"? desde que, se você digitar array, obteve array ("c", "abc"), mas um [0] == a? Obrigado
Clinteney Hui 22/03
@Clinteney: O 'c' significa "criar uma matriz de caracteres". Veja os documentos para obter mais informações
Cameron
Voto a favor, mas muito cedo. Eu obtenho uma matriz ('c', '1 1 91 0,001 228') ao chamar a = matriz ('c', e) em que e = "1 1 91 0,001 228"
Valentin Heinitz
@ValentinHeinitz Sim, é isso que você deve obter, como mostrado no meu exemplo. O que você espera?
Joaquin
1
@joaquin: Ok, entendi. Está tudo bem com a resposta. Fiquei confuso com a pergunta "text == [a, b, c]" deveria 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 converter um que stringpossua o formulário a="[[1, 3], [2, -6]]", escrevi um código ainda não otimizado:
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
Respostas:
Como isso:
Como alternativa, você pode usar
eval()
se confiar que a cadeia de caracteres é segura:fonte
pickle
se você persiste objetos em strings.Apenas para adicionar às respostas existentes: espero que você encontre algo mais parecido com isso no futuro:
Mas com o que você está lidando agora , siga a resposta de @ Cameron .
fonte
O seguinte código Python transformará sua string em uma lista de strings:
fonte
json
por exemplo:json.loads(teststr)
Eu não acho que você precisa para
No python, você raramente precisa converter uma string em uma lista, porque strings e listas são muito semelhantes
Alterando o tipo
Se você realmente possui uma string que deve ser uma matriz de caracteres, faça o seguinte:
Não alterando o tipo
Observe que Strings são muito parecidas com listas em python
Strings têm acessadores, como listas
Strings são iteráveis, como listas
TLDR
Strings são listas. Quase.
fonte
Caso deseje dividir por espaços, basta usar
.split()
:Resultado:
fonte
()
, ou seja, nada.Se você realmente deseja matrizes:
Se você não precisa de matrizes e deseja apenas procurar por índice seus caracteres, lembre-se de que uma string é iterável, como uma lista, exceto pelo fato de ser imutável:
fonte
fonte
Todas as respostas são boas, há outra maneira de fazer, que é a compreensão da lista, veja a solução abaixo.
para lista separada por vírgula, faça o seguinte
fonte
Eu costumo usar:
os
strip
espaços removem cerca de palavras.fonte
Para converter um que
string
possua o formulárioa="[[1, 3], [2, -6]]"
, escrevi um código ainda não otimizado:fonte
Você deve usar o built-in
translate
método interno para seqüências de caracteres.Digite
help('abc'.translate)
no shell Python para obter mais informações.fonte
Usando Python funcional:
fonte
Exemplo 1
Exemplo 2
fonte