Convierte todas las cadenas en una lista a números enteros

5 minutos de lectura

Avatar de usuario de Michael
Miguel

¿Cómo convierto todas las cadenas en una lista a números enteros?

['1', '2', '3']  ⟶  [1, 2, 3]

avatar de usuario de mejillas
cachetear

Dado:

xs = ['1', '2', '3']

Usar map entonces list para obtener una lista de enteros:

list(map(int, xs))

En Python 2, list era innecesario ya que map devolvió una lista:

map(int, xs)

  • Quiero señalar que pylint desaconseja el uso de map, así que prepárese para usar listas de comprensión de todos modos si alguna vez usa ese estándar. 🙂

    – ThorSummoner

    12 de febrero de 2015 a las 6:41

  • El inverso es (para convertir una lista de int a una lista de cadenas): map (str, resultados)

    – Ali AISS

    11 de marzo de 2017 a las 22:08

  • Puedes simplificar esta respuesta: solo usa siempre list(map(int, results))funciona para cualquier versión de Python.

    – jugador más valioso

    24/01/2018 a las 18:50

  • Solo quiero agregar para la función de mapa, su tipo es iterable, por lo que, técnicamente, si tuviera que recorrerlo en iteración, no necesitaría convertirlo en una lista.

    – ThatOneAmazingPanda

    31 de diciembre de 2020 a las 16:38

Avatar de usuario de Chris Vig
chris vig

Usar una lista de comprensión en la lista xs:

[int(x) for x in xs]

p.ej

>>> xs = ["1", "2", "3"]
>>> [int(x) for x in xs]
[1, 2, 3]

  • La comprensión de listas también es excelente. Al OP: vea aquí para ver un buen contraste de comprensión de mapas y listas: stackoverflow.com/questions/1247486/…

    – mejilla

    10 de septiembre de 2011 a las 2:08

Hay varios métodos para convertir números de cadena en una lista a números enteros.

En Python 2.x puedes usar el mapa función:

>>> results = ['1', '2', '3']
>>> results = map(int, results)
>>> results
[1, 2, 3]

Aquí, devuelve la lista de elementos después de aplicar la función.

En Python 3.x puedes usar el mismo mapa

>>> results = ['1', '2', '3']
>>> results = list(map(int, results))
>>> results
[1, 2, 3]

A diferencia de Python 2.x, aquí la función de mapa devolverá el objeto del mapa, es decir iterator lo que arrojará el resultado (valores) uno por uno, esa es la razón por la que necesitamos agregar una función llamada como list que se aplicará a todos los elementos iterables.

Consulte la imagen a continuación para ver el valor de retorno de la map función y su tipo en el caso de python 3.x

objeto de iterador de función de mapa y su tipo

El tercer método que es común tanto para python 2.x como para python 3.x, es decir Lista de comprensiones

>>> results = ['1', '2', '3']
>>> results = [int(i) for i in results]
>>> results
[1, 2, 3]

avatar de usuario de danialcodes
danialcodes

Puede convertir fácilmente los elementos de la lista de cadenas en elementos int usando la abreviatura de bucle en python

Digamos que tienes una cuerda result = ['1','2','3']

Solo haz,

result = [int(item) for item in result]
print(result)

Te dará una salida como

[1,2,3]

Avatar de usuario de Patrick Artner
patricio artner

Si su lista contiene cadenas enteras puras, la respuesta aceptada es el camino a seguir. Se bloqueará si le das cosas que no son números enteros.

Entonces: si tiene datos que pueden contener enteros, posiblemente flotantes u otras cosas también, puede aprovechar su propia función con el manejo de errores:

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)

Producción:

['unkind', 'data', 42, 98, 47.11, 'of mixed', 'types']

Para manejar también iterables dentro de iterables, puede usar este ayudante:

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)

Producción:

['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

Avatar de usuario de la comunidad
Comunidad

Un poco más ampliado que la lista de comprensión pero igualmente útil:

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)

p.ej

>>> results = ["1", "2", "3"]
>>> str_list_to_int_list(results)
[1, 2, 3]

También:

def str_list_to_int_list(str_list):
    int_list = [int(n) for n in str_list]
    return int_list

Avatar de usuario de Code Carbonate
Código Carbonato

Aquí hay una solución simple con una explicación para su consulta.

 a=['1','2','3','4','5'] #The integer represented as a string in this list
 b=[] #Fresh list
 for i in a: #Declaring variable (i) as an item in the list (a).
     b.append(int(i)) #Look below for explanation
 print(b)

Aquí, adjuntar() se utiliza para agregar elementos (es decir, la versión entera de la cadena (i) en este programa) al final de la lista (b).

Nota: En t() es una función que ayuda a convertir un número entero en forma de cadena, de vuelta a su forma de número entero.

Consola de salida:

[1, 2, 3, 4, 5]

Por lo tanto, podemos convertir los elementos de la cadena en la lista en un número entero solo si la cadena dada está compuesta completamente por números o, de lo contrario, se generará un error.

¿Ha sido útil esta solución?