Ответ 1
[float(i) for i in lst]
чтобы быть точным, он создает новый список со значениями float. В отличие от подхода map
он будет работать в py3k.
У меня есть сценарий, который читает текстовый файл, вытягивает из него десятичные числа в виде строк и помещает их в список.
Итак, у меня есть этот список:
['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)
Но это, похоже, не работает для меня.
[float(i) for i in lst]
чтобы быть точным, он создает новый список со значениями float. В отличие от подхода map
он будет работать в py3k.
map(float, mylist)
должен это сделать.
(В Python 3 карта перестает возвращать объект списка, поэтому, если вам нужен новый список, а не только что-то переименовать, вам либо нужно list(map(float, mylist)
- либо использовать ответ SilentGhost, который, возможно, более питонов.)
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
для своих переменных, так как он маскирует встроенную функцию с тем же именем.
Это был бы другой метод (без использования какого-либо цикла!):
import numpy as np
list(np.float_(list_name))
Вы можете использовать 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
вы даже можете сделать это с помощью numpy
import numpy as np
np.array(your_list,dtype=float)
этот возвращаемый массив np вашего списка как float
вы также можете установить 'dtype' как int
Вот как я это сделаю.
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'>
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'>
Я решил эту проблему в моей программе, используя:
number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Сначала мне пришлось извлечь числа из списка строк с плавающей точкой:
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)
for i in range(len(list)): list[i]=float(list[i])