Comment convertissez-vous une chaîne en liste?
Disons que la chaîne est comme text = "a,b,c"
. Après la conversion, text == ['a', 'b', 'c']
et je l' espère text[0] == 'a'
, text[1] == 'b'
?
Comment convertissez-vous une chaîne en liste?
Disons que la chaîne est comme text = "a,b,c"
. Après la conversion, text == ['a', 'b', 'c']
et je l' espère text[0] == 'a'
, text[1] == 'b'
?
Réponses:
Comme ça:
>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]
Vous pouvez également utiliser eval()
si vous faites confiance à la chaîne pour être sûre:
>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')
Juste pour ajouter aux réponses existantes: j'espère que vous rencontrerez quelque chose de plus comme ça à l'avenir:
>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'
Mais ce à quoi vous avez affaire en ce moment , allez avec la réponse de @ Cameron .
>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
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)
json
par exemple:json.loads(teststr)
En python, vous avez rarement besoin de convertir une chaîne en liste, car les chaînes et les listes sont très similaires
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']
Notez que les chaînes ressemblent beaucoup à des listes en python
In [3]: x[0]
Out[3]: 'f'
In [4]: for i in range(len(x)):
...: print x[i]
...:
f
o
o
b
a
r
Les chaînes sont des listes. Presque.
Si vous souhaitez diviser par espaces, vous pouvez simplement utiliser .split()
:
a = 'mary had a little lamb'
z = a.split()
print z
Production:
['mary', 'had', 'a', 'little', 'lamb']
()
, c'est-à-dire rien du tout.
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 par index vos caractères, rappelez-vous qu'une chaîne est un itérable, tout comme une liste sauf le fait qu'elle est immuable:
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'
Toutes les réponses sont bonnes, il existe une autre façon de faire, qui est la compréhension de liste, voir la solution ci-dessous.
u = "UUUDDD"
lst = [x for x in u]
pour une 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(',')]
J'utilise habituellement:
l = [ word.strip() for word in text.split(',') ]
la strip
suppression des espaces autour des mots.
Pour convertir un code string
ayant la forme que a="[[1, 3], [2, -6]]"
j'ai écrit mais pas 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
Utilisation de Python fonctionnel:
text=filter(lambda x:x!=',',map(str,text))
Exemple 1
>>> email= "myemailid@gmail.com"
>>> email.split()
#OUTPUT
["myemailid@gmail.com"]
Exemple 2
>>> email= "myemailid@gmail.com, someonsemailid@gmail.com"
>>> email.split(',')
#OUTPUT
["myemailid@gmail.com", "someonsemailid@gmail.com"]