2010-07-30 8 views
126

Tengo una lista con las series numéricas, así:¿Llamar a la función int() en cada elemento de la lista?

numbers = ['1', '5', '10', '8']; 

me gustaría convertir cada elemento de la lista a un entero, por lo que se vería así:

numbers = [1, 5, 10, 8]; 

que podía hacerlo usando un bucle, como el siguiente:

new_numbers = []; 
for n in numbers: 
    new_numbers.append(int(n)); 
numbers = new_numbers; 

¿Tiene que ser tan feo? Estoy seguro de que hay una forma más pitonica de hacer esto en una línea de código. Por favor, ayúdame.

+1

¿Qué versión de Python estás usando ? –

+0

Uso python 2.6, gracias –

Respuesta

262

Esto es lo que las listas por comprensión son para:

numbers = [ int(x) for x in numbers ] 
89

En Python 2.x otro enfoque es utilizar map:

numbers = map(int, numbers) 

Nota: en Python 3.x map devuelve un objeto de mapa cuál usted puede convertir a una lista si usted quiere:

numbers = list(map(int, numbers)) 
+8

En Python 3.x, 'map' devuelve un iterador en lugar de una lista, por lo que debe escribirse como' list (map (int, numbers)) 'si se necesita una lista. – kennytm

+0

@KennyTM: Gracias. Actualizado. :) –

+2

Creo que actualmente el enfoque de la lista de comprensión es un poco más favorecido. – extraneon

3

Ano Ther manera,

for i, v in enumerate(numbers): numbers[i] = int(v) 
+5

OP dijo * pythonic * – SilentGhost

+2

no, dijo "... más pitónico" –

+3

De esta manera es muy útil si desea ejecutar la operación solo en algunos de los elementos en la lista. Esto no es relevante para la pregunta en este hilo, pero puede haber casos en los que sea útil – Dikla

8

si tiene la intención de pasar esos números enteros a una función o método, considere este ejemplo:

sum(int(x) for x in numbers) 

Esta construcción es intencionalmente notablemente similares a las listas por comprensión mencionados por adamk. Sin los corchetes, se llama expresión de generador , y es una forma muy eficiente de memoria de pasar una lista de argumentos a un método. Una buena discusión está disponible aquí: Generator Expressions vs. List Comprehension

12

sólo un punto,

numbers = [int(x) for x in numbers] 

la lista por comprensión es más natural, mientras que

numbers = map(int, x) 

es más rápido.

Probablemente esto no importa en la mayoría de los casos

lectura útil: LP vs map

+6

¿No debería ser number = map (int, number)? – Karan

2

Otra forma de hacer que en Python 3:

numbers = [*map(int, numbers)]

+0

¿Puedes explicar esto? No estoy familiarizado con esa sintaxis. ¡Gracias! – abalter

+1

Estoy usando la lista de desempaquetar argumentos (https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) –

+0

Aha, una cosa de pitón 3. Parece extraño tener '[]' tomar una lista de argumentos. Y, no sabía que podría pasar un iterador como lista de argumentos. Hubiera pensado hacer 'number = list (map (int, numbers))'. Pero gracias por la explicación! – abalter

Cuestiones relacionadas