2009-10-23 16 views
128

Tengo un script que lee un archivo de texto, extrae los números decimales como cadenas y los coloca en una lista.En Python, ¿cómo convierto todos los elementos de una lista en flotantes?

así que tengo esta lista:

[ '0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', ' 0.54 ',' 0.54 ',' 0.55 ',' 0.55 ',' 0.55 ',' 0.54 ',' 0.55 ',' 0.55 ',' 0.54 ',' 0.55 ',' 0.55 ',' 0.54 ']

¿Cómo convierto cada uno de los valores de la lista de una cadena a un flotante?

que he intentado:

for item in list: 
    float(item) 

Pero esto no parece funcionar para mí.

+31

No utilice la lista como nombre de variable. –

Respuesta

248
[float(i) for i in lst] 

para ser precisos, crea una nueva lista con valores flotantes. A diferencia del enfoque map, funcionará en py3k.

+0

Tuve el mismo problema, y ​​sin resolver: ff1 = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54'] #ff = [flotador (i.strip ("[]")) para i en ff1] ff = [float (i) para i en ff1] print "\ n% s"% ff print "\ nTypeof ff =% s"% tipo (ff) y el Tipo sigue siendo la "Lista" siempre –

77

map(float, mylist) debería hacerlo.

(En Python 3, mapa deja de devolver un objeto de la lista, así que si quieres una nueva lista y no sólo algo para repetir, que sea necesario list(map(float, mylist) -. O utilizar la respuesta de SilentGhost lo que sin duda es más Pythonic)

10

float(item) haga lo correcto: convierte su argumento en float y lo devuelve, pero no cambia el argumento in-situ. Una solución simple para su código es:

new_list = [] 
for item in list: 
    new_list.append(float(item)) 

El mismo código puede escrito más corto usando listas por comprensión: new_list = [float(i) for i in list]

Para cambiar lista en contexto:

for index, item in enumerate(list): 
    list[index] = float(item) 

Por cierto, evitar el uso de list de sus variables, ya que enmascara la función incorporada con el mismo nombre.

+0

Lo siento, no obtuve lo que en el lugar significa aquí.¿Cómo difiere de la respuesta pitonica anterior? La conversión en la respuesta anterior "[float (i) for i in list]" no retiene el índice de la lista original – AAI

+1

@AAI Cambie la lista original en lugar de crear una nueva. –

3

Puede usar numpy para convertir una lista directamente en una matriz o matriz flotante.

import numpy as np 
    list_ex = [1, 0] # This a list 
    list_int = np.array(list_ex) # This is a numpy integer array 

Si desea convertir el arreglo de enteros a una matriz flotante a continuación, añadir a 0. se

list_float = np.array(list_ex) + 0. # This is a numpy floating array 
1

Ésta es la forma en que lo haría.

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54'] 
print type(my_list[0]) # prints <type 'str'> 
my_list = [float(i) for i in my_list] 
print type(my_list[0]) # prints <type 'float'> 
Cuestiones relacionadas