1
votes

Comment puis-je convertir en nombres entiers à partir de numéros de chaîne en python

Je souhaite modifier le type de mes numéros de chaîne. Je veux les rendre entiers pour comparer lequel est le plus grand.

ns[i]=int(ns[i])
ValueError: invalid literal for int() with base 10: '4,'

Je reçois une erreur comme celle-ci

numbers="4, 5, 29, 54, 4 ,0 ,-214, 542, -64, 1 ,-3, 6, -6"

ns=numbers.split()
nsi=[]
for i in range(len(ns)):
    ns[i]=int(ns[i])
    nsi.append(ns[i])


print(nsi)


2 commentaires

Juste ns = [int (n) pour n en nombres.split (',')] fonctionne très bien.


list (map (int, numbers.split (","))) fonctionne également.


6 Réponses :


0
votes

Lorsque vous divisez la chaîne, elle est divisée par des espaces ... donc avec chaque nombre, il y a toujours la virgule.

corrigé:

numbers="4, 5, 29, 54, 4 ,0 ,-214, 542, -64, 1 ,-3, 6, -6"

ns=numbers.replace(",", "").split()
nsi=[]
for i in range(len(ns)):
    ns[i]=int(ns[i])
    nsi.append(ns[i])

print(nsi)
ns[i]=int(ns[i])


0 commentaires

0
votes

Le problème est que split () utilise un espace comme caractère fractionné par défaut. Il reste donc la virgule. Vous pouvez spécifier le séparateur de la fonction avec split (',') .

Voir cet exemple sur la façon dont le fractionnement est utilisé.


0 commentaires

0
votes

Vous pouvez utiliser un séparateur différent dans split ().

numbers="4, 5, 29, 54, 4 ,0 ,-214, 542, -64, 1 ,-3, 6, -6"

ns=numbers.split(sep=",")
nsi=[]
for i in range(len(ns)):
   ns[i]=int(ns[i])
   nsi.append(ns[i])

print(nsi)


0 commentaires

0
votes

Vous pouvez faire

[4, 5, 29, 54, 4, 0, -214, 542, -64, 1, -3, 6, -6]

ou

numbers="4, 5, 29, 54, 4 ,0 ,-214, 542, -64, 1 ,-3, 6, -6"
ns = [int(i) for i in numbers.split(",")]
nsi=[]
nsi.extend(ns)
print(nsi)

Cela convertira tous les nombres de la compilation de la liste de nombres en int. Sortie

numbers="4, 5, 29, 54, 4 ,0 ,-214, 542, -64, 1 ,-3, 6, -6"
ns = [int(i) for i in numbers.split(",")]
nsi=[]
for i in range(len(ns)):
   nsi.append(ns[i])
print(nsi)


4 commentaires

Pourquoi la deuxième boucle? Pourquoi ne pas simplement attribuer nsi pour commencer?


Juste parce que c'était dans la demande


Merci beaucoup pour votre réponse. Je t'apprécie:)


Bienvenue, bienvenue à SO. si la réponse vous a aidé, veuillez voter et marquer comme réponse.



0
votes

Vous avez fait une erreur.

Changez cette ligne

ns=numbers.split(", ")

En ceci

ns=numbers.split()


0 commentaires

0
votes

L'utilisation de .split (",") vous donnera une erreur lorsque vous essayez de convertir les éléments du tableau en nombres entiers comme nombres.split (",") donnera la sortie comme

>>> ns = numbers.split(",")
>>> print ns
['4', ' 5', ' 29', ' 54', ' 4 ', '0 ', '-214', ' 542', ' -64', ' 1 ', '-3', ' 6', ' -6']
>>> a = int(ns[1])
>>> print a
5

Au lieu de cela, vous ne pouvez faire que

numbers.split(",")

et cela vous donnera le tableau d'entiers correct. puis transtypez les éléments pour vos besoins en int (...)

ns = numbers.split(", ")
>>> print ns
['4', '5', '29', '54', '4 ,0 ,-214', '542', '-64', '1 ,-3', '6', '-6'] //'4 ->incorrect output
>>> print int(ns[4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '4 ,0 ,-214'
>>>


0 commentaires