web-dev-qa-db-fra.com

Changer une chaîne d'entiers séparés par des espaces en une liste d'entiers

Comment puis-je faire quelque chose comme

x = '1 2 3 45 87 65 6 8'

>>> foo(x)
[1,2,3,45,87,65,6,8]

Je suis complètement bloqué, si je le fais par index, les nombres avec plus d'un chiffre seront décomposés. Aidez-moi, s'il vous plaît.

29
Spock

Vous pouvez utiliser une compréhension de liste en combinaison avec la méthode .split () :

x = [int(i) for i in x.split()]

Sinon, vous pouvez utiliser map aswell:

x = list(map(int, x.split()))

Cela créera une list de int si vous voulez des entiers.

ou utilisez simplement .split() pour obtenir une liste de chaînes:

x = x.split()

Si vous voulez créer une liste de str

39
tijko

Ne vous inquiétez pas, car python fournit la fonction split () pour changer de chaîne en liste.

x='1 2 3 4 67 8 9'
x.split()

['1', '2', '3', '4', '67', '8']

ou si vous voulez une sortie sous forme entière, vous pouvez utiliser la fonction map

map(int ,x.split(' '))

[1, 2, 3, 4, 67, 8]

3
Shivendra Singh

Une simple ligne peut être ...

print (map(int, x.split()))  

Comme quelqu'un m'a sagement corrigé, en python> = 3, il deviendra

print(list(map(int,x.split())))  

Il peut également être utilisateur dans les versions antérieures.

1

Juste pour faire une explication claire.

Vous pouvez utiliser la méthode de chaîne str.split() qui divise la chaîne en une liste. Vous pouvez en apprendre plus sur cette méthode ici .

Exemple:

def foo(x):
    x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed.
    for i, v  in enumerate(x): #Loop through the list
        x[i] = int(v) #convert each element of v to an integer

Ça devrait le faire!

>>> x
[1, 2, 3, 45, 87, 65, 6, 8]
0
aIKid

En supposant que vous n'ayez que des chiffres dans votre entrée, vous pouvez avoir quelque chose comme suit:

>>> x = '1 2 3 45 87 65 6 8'
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1 2 3 45 87 65 6 8]

Cela prend en charge le cas où les chiffres sont séparés par plus d'un caractère d'espacement ou lorsqu'il y a des caractères d'espacement devant ou derrière l'entrée. Quelque chose comme suit:

>>> x = ' 1 2 3  4 '
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1, 2, 3, 4]

Vous pouvez remplacer l’entrée dans x.split(' ') pour qu’elle corresponde à d’autres types de délimiteurs, par ex. , ou ; etc.

0
6pack kid