En Python, je veux convertir toutes les chaînes de caractères d'une liste en nombres entiers.
Donc si je l'ai fait :
results = ['1', '2', '3']
Comment le faire :
results = [1, 2, 3]
En Python, je veux convertir toutes les chaînes de caractères d'une liste en nombres entiers.
Donc si je l'ai fait :
results = ['1', '2', '3']
Comment le faire :
results = [1, 2, 3]
Je tiens à souligner que pylint décourage l'utilisation de map
préparez-vous donc à utiliser les compréhensions de listes si jamais vous utilisez cette norme :)
Vous pouvez simplifier cette réponse : il suffit de toujours utiliser list(map(int, results))
il fonctionne pour toutes les versions de Python.
Utilisez un compréhension de la liste :
results = [int(i) for i in results]
par exemple
>>> results = ["1", "2", "3"]
>>> results = [int(i) for i in results]
>>> results
[1, 2, 3]
La compréhension des listes est également excellente. Pour le PO - voir ici pour voir un beau contraste entre la compréhension de cartes et de listes : stackoverflow.com/questions/1247486/
Si votre liste contient des chaînes d'entiers purs, la réponse acceptée est la solution à adopter. Cette solution se plantera si vous lui donnez des choses qui ne sont pas des entiers.
Ainsi, si vous avez des données qui peuvent contenir des ints, éventuellement des floats ou d'autres éléments, vous pouvez tirer parti de votre propre fonction de traitement des erreurs :
def maybeMakeNumber(s):
"""Returns a string 's' into a integer if possible, a float if needed or
returns it as is."""
# handle None, "", 0
if not s:
return s
try:
f = float(s)
i = int(f)
return i if f == i else f
except ValueError:
return s
data = ["unkind", "data", "42", 98, "47.11", "of mixed", "types"]
converted = list(map(maybeMakeNumber, data))
print(converted)
Sortie :
['unkind', 'data', 42, 98, 47.11, 'of mixed', 'types']
Pour gérer également les itérables à l'intérieur des itérables, vous pouvez utiliser cette aide :
from collections.abc import Iterable, Mapping
def convertEr(iterab):
"""Tries to convert an iterable to list of floats, ints or the original thing
from the iterable. Converts any iterable (tuple,set, ...) to itself in output.
Does not work for Mappings - you would need to check abc.Mapping and handle
things like {1:42, "1":84} when converting them - so they come out as is."""
if isinstance(iterab, str):
return maybeMakeNumber(iterab)
if isinstance(iterab, Mapping):
return iterab
if isinstance(iterab, Iterable):
return iterab.__class__(convertEr(p) for p in iterab)
data = ["unkind", {1: 3,"1":42}, "data", "42", 98, "47.11", "of mixed",
("0", "8", {"15", "things"}, "3.141"), "types"]
converted = convertEr(data)
print(converted)
Sortie :
['unkind', {1: 3, '1': 42}, 'data', 42, 98, 47.11, 'of mixed',
(0, 8, {'things', 15}, 3.141), 'types'] # sets are unordered, hence diffrent order
Vous pouvez facilement convertir les éléments d'une liste de chaînes en éléments de type int en utilisant le raccourci de boucle en python.
Disons que vous avez une chaîne result = ['1','2','3']
Fais-le,
result = [int(item) for item in result]
print(result)
Cela vous donnera un résultat comme
[1,2,3]
Un peu plus étendu que la compréhension des listes, mais tout aussi utile :
def str_list_to_int_list(str_list):
n = 0
while n < len(str_list):
str_list[n] = int(str_list[n])
n += 1
return(str_list)
par exemple
>>> results = ["1", "2", "3"]
>>> str_list_to_int_list(results)
[1, 2, 3]
Aussi :
def str_list_to_int_list(str_list):
int_list = [int(n) for n in str_list]
return int_list
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Regardez ça : stackoverflow.com/questions/642154/