web-dev-qa-db-fra.com

Comment convertir une chaîne en une liste en Python?

Comment convertissez-vous une chaîne en liste?

Supposons que la chaîne ressemble à text = "a,b,c". Après la conversion, text == ['a', 'b', 'c'] et, espérons-le, text[0] == 'a', text[1] == 'b'?

71
Clinteney Hui

Comme ça:

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

Sinon, vous pouvez utiliser eval() si vous pensez que la chaîne est sûre:

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

Pour ajouter aux réponses existantes: j'espère que vous rencontrerez quelque chose de plus semblable à l'avenir:

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

Mais ce que vous avez à faire avec maintenant, allez avec la réponse de @ Cameron .

>>> Word = 'a,b,c'
>>> L = Word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
109
Droogans

Le code Python suivant transformera votre chaîne en une liste de chaînes:

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

Je ne pense pas que tu besoin de

En python, vous devez rarement convertir une chaîne en liste, car les chaînes et les listes sont très similaires.

Changer le type

Si vous avez vraiment une chaîne qui devrait être un tableau de caractères, procédez comme suit:

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

Ne pas changer le type

Notez que les chaînes ressemblent beaucoup aux listes en python

Les chaînes ont des accesseurs, comme des listes

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

Les chaînes sont éditables, comme des listes

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

TLDR

Les chaînes sont des listes. Presque.

14
firelynx

Si vous voulez réellement des tableaux:

>>> 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 vous n'avez pas besoin de tableaux et que vous voulez seulement regarder vos personnages par index, souvenez-vous qu'une chaîne est une chaîne itérable, tout comme une liste, sauf qu'elle est immuable:

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

Si vous souhaitez diviser par des espaces, vous pouvez simplement utiliser .split():

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

Sortie:

['mary', 'had', 'a', 'little', 'lamb'] 
3
vivek mishra
m = '[[1,2,3],[4,5,6],[7,8,9]]'

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

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
1
Josué

Pour convertir une string sous la forme a="[[1, 3], [2, -6]]" j'ai écrit un code non optimisé:

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
1
Khalid

J'utilise habituellement:

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

la strip supprime les espaces autour des mots.

1
Yannick Loiseau
# to strip `,` and `.` from a string ->

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

Vous devez utiliser la méthode translate intégrée pour les chaînes. 

Tapez help('abc'.translate) dans Python Shell pour plus d'informations.

0
N 1.1

Utilisation de Python fonctionnel:

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

Toutes les réponses sont bonnes, il y a une autre façon de faire, la compréhension de liste, voir la solution ci-dessous 

u = "UUUDDD"

lst = [x for x in u]

pour la liste séparée par des virgules, procédez comme suit 

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

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