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)
6 Réponses :
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])
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é.
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)
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)
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.
Vous avez fait une erreur.
Changez cette ligne
ns=numbers.split(", ")
En ceci
ns=numbers.split()
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' >>>
Juste
ns = [int (n) pour n en nombres.split (',')]
fonctionne très bien.list (map (int, numbers.split (",")))
fonctionne également.