798 votes

Convertir toutes les chaînes de caractères d'une liste en int.

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]

2 votes

1481voto

cheeken Points 9013

Utilisez le map (dans Python 2.x) :

results = map(int, results)

En Python 3, vous devrez convertir le résultat de map à une liste :

results = list(map(int, results))

34 votes

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 :)

7 votes

L'inverse est ( pour convertir une liste d'int en liste de string ) : map( str, results)

16 votes

Vous pouvez simplifier cette réponse : il suffit de toujours utiliser list(map(int, results)) il fonctionne pour toutes les versions de Python.

477voto

Chris Vig Points 1240

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]

31 votes

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/

8voto

Patrick Artner Points 29630

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

8voto

danialcodes Points 9

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]

5voto

2RMalinowski Points 71

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.com

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.

Powered by:

X