J'ai une chaîne de chiffres, quelque chose comme:
example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
Je voudrais convertir ceci en une liste:
example_list = [0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]
J'ai essayé quelque chose comme:
for i in example_string:
example_list.append(int(example_string[i]))
Mais cela ne fonctionne évidemment pas, car la chaîne contient des espaces et des virgules. Cependant, leur suppression n'est pas une option, car les nombres comme '19' seraient convertis en 1 et 9. Pourriez-vous m'aider à ce sujet?
Séparez par des virgules, puis mappez sur des nombres entiers:
map(int, example_string.split(','))
Ou utilisez une liste de compréhension:
[int(s) for s in example_string.split(',')]
Ce dernier fonctionne mieux sur Python 3 si vous voulez un résultat de liste.
Cela fonctionne parce que int()
tolère les espaces:
>>> example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
>>> map(int, example_string.split(',')) # Python 2, in Python 3 returns iterator object
[0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]
>>> [int(s) for s in example_string.split(',')]
[0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]
Fractionner sur juste une virgule est également plus tolérant à l'entrée variable; peu importe si 0, 1 ou 10 espaces sont utilisés entre les valeurs.
Je suppose que la solution la plus sale est la suivante:
list(eval('0, 0, 0, 11, 0, 0, 0, 11'))
number_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
number_string = number_string.split(',')
number_string = [int(i) for i in number_string]
ça devrait marcher
example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
example_list = [int(k) for k in example_string.split(',')]
Vous pouvez également utiliser la compréhension de liste sur une chaîne fractionnée
[ int(x) for x in example_string.split(',') ]
Essaye ça :
import re
[int(s) for s in re.split('[\s,]+',example_string)]