web-dev-qa-db-fra.com

Python - conversion d'une chaîne de nombres en une liste d'int

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?

24
Bart M

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.

55
Martijn Pieters

Je suppose que la solution la plus sale est la suivante:

list(eval('0, 0, 0, 11, 0, 0, 0, 11'))
7
hendrik
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]
6
Rohit Singh

ç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(',')]
5
lucemia

Vous pouvez également utiliser la compréhension de liste sur une chaîne fractionnée

[ int(x) for x in example_string.split(',') ]
4
lejlot

Essaye ça :

import re
[int(s) for s in re.split('[\s,]+',example_string)]
2
Charles JOUBERT