Miguel
¿Cómo convierto todas las cadenas en una lista a números enteros?
['1', '2', '3'] ⟶ [1, 2, 3]
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
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
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]
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]
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
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
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.