В Python, как мне преобразовать все элементы в список в float?

У меня есть сценарий, который читает текстовый файл, вытягивает из него десятичные числа в виде строк и помещает их в список.

Итак, у меня есть этот список:

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

Как преобразовать каждое из значений из списка из строки в float?

Я пытался:

for item in list:
    float(item)

Но это, похоже, не работает для меня.

Ответ 1

[float(i) for i in lst]

чтобы быть точным, он создает новый список со значениями float. В отличие от подхода map он будет работать в py3k.

Ответ 2

map(float, mylist) должен это сделать.

(В Python 3 карта перестает возвращать объект списка, поэтому, если вам нужен новый список, а не только что-то переименовать, вам либо нужно list(map(float, mylist) - либо использовать ответ SilentGhost, который, возможно, более питонов.)

Ответ 3

float(item) поступайте правильно: он преобразует свой аргумент в float и возвращает его, но он не меняет аргумент на месте. Простое исправление для вашего кода:

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

Тот же код может быть написан короче, используя понимание списка: new_list = [float(i) for i in list]

Чтобы изменить список на месте:

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

Кстати, не используйте list для своих переменных, так как он маскирует встроенную функцию с тем же именем.

Ответ 4

Это был бы другой метод (без использования какого-либо цикла!):

import numpy as np
list(np.float_(list_name))

Ответ 5

Вы можете использовать numpy для преобразования списка непосредственно в плавающий массив или матрицу.

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

Если вы хотите преобразовать массив integer в плавающий массив, тогда добавьте 0.

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

Ответ 6

вы даже можете сделать это с помощью numpy

import numpy as np
np.array(your_list,dtype=float)

этот возвращаемый массив np вашего списка как float

вы также можете установить 'dtype' как int

Ответ 7

Вот как я это сделаю.

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

Ответ 8

import numpy as np
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), type(my_list[0]))   
# <class 'list'> <class 'str'>

который отображает тип как список строк. Вы можете преобразовать этот список в массив float одновременно, используя numpy:

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>

Ответ 9

Я решил эту проблему в моей программе, используя:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

Ответ 10

Сначала мне пришлось извлечь числа из списка строк с плавающей точкой:

   df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')

затем каждый конвертируется в число с плавающей точкой:

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

в конце назначьте все плавающие кадрам данных как float64:

   df4['fscore'] = np.array(ad,dtype=float)

Ответ 11

for i in range(len(list)): list[i]=float(list[i])