2009-10-23 12 views
128

Mam skrypt, który odczytuje plik tekstowy, pobiera z niego liczby dziesiętne jako ciągi i umieszcza je na liście.W języku Python, w jaki sposób konwertować wszystkie elementy na liście do pływaków?

Mam więc tę 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 ']

Jak przekonwertować każdą z wartości na liście z ciągu na wartość zmiennoprzecinkową?

Próbowałem:

for item in list: 
    float(item) 

Ale to nie wydają się działać dla mnie.

+31

Nie używaj listy jako nazwy zmiennej. –

Odpowiedz

248
[float(i) for i in lst] 

Dokładniej, tworzy nową listę z wartościami zmiennoprzecinkowymi. W przeciwieństwie do podejścia map będzie działać w py3k.

+0

Miałem ten sam problem i nierozwiązany: 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 = [pływak (i.strip ("[]")) for i in ff1] ff = [float (i) dla i in ff1] print "\ n% s"% ff print "\ nTypeof ff =% s"% type (ff) i typ wciąż jest "listą" zawsze –

77

map(float, mylist) powinien to zrobić.

(W Pythonie 3, mapa przestaje zwracać obiekt listy, więc jeśli chcesz utworzyć nową listę, a nie tylko coś do iteracyjnego, albo trzeba list(map(float, mylist). - lub użyj odpowiedź SilentGhost, która prawdopodobnie jest bardziej pythonic)

10

float(item) postępuj właściwie: konwertuje argument na float i zwraca go, ale nie zmienia argumentów w miejscu. Prostym rozwiązaniem dla kodu jest:

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

Ten sam kod może napisany krótszy użyciu listowych: new_list = [float(i) for i in list]

Do listy zmieni się w miejscu:

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

BTW, unikać list dla twoje zmienne, ponieważ maskuje wbudowaną funkcję o tej samej nazwie.

+0

Niestety, nie dostałem tego, co na miejscu oznacza tutaj.Czym różni się od poprzedniej odpowiedzi pytonickiej. Czy konwersja w poprzedniej odpowiedzi "[float (i) dla i w lst]" zachowuje oryginalny indeks listy – AAI

+1

@AAI Zmień oryginalną listę a utwórz nową. –

3

Możesz użyć numpy, aby przekształcić listę bezpośrednio w pływającą tablicę lub macierz.

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

Jeśli chcesz przekonwertować tablicę liczb całkowitych do tablicy pływającej następnie dodać do niej 0.

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

To w jaki sposób to zrobić.

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'> 
Powiązane problemy