В Python, как мне преобразовать все элементы списка в плавающие? - PullRequest
187 голосов
/ 23 октября 2009

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

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

[0,49, 0,54, 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,55 ',' 0,54 ',' 0,55 ',' 0,55 ',' 0,54 ',' 0,55 ',' 0,55 ',' 0,54 ']

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

Я пытался:

for item in list:
    float(item)

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

Ответы [ 11 ]

354 голосов
/ 23 октября 2009
[float(i) for i in lst]
Если быть точным,

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

103 голосов
/ 23 октября 2009

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

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

14 голосов
/ 23 октября 2009

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 для своих переменных, поскольку он маскирует встроенную функцию с тем же именем.

9 голосов
/ 26 мая 2018

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

import numpy as np
list(np.float_(list_name))
3 голосов
/ 07 января 2016

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

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

Если вы хотите преобразовать целочисленный массив в плавающий массив, добавьте к нему 0.

    list_float = np.array(list_ex) + 0. # This is a numpy floating array
1 голос
/ 16 сентября 2018

Вы даже можете сделать это numpy

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

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

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

1 голос
/ 28 января 2018

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

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'>
0 голосов
/ 23 мая 2019
for i in range(len(list)): list[i]=float(list[i])
0 голосов
/ 05 марта 2019

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

   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)
0 голосов
/ 04 сентября 2018

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

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...