Самый питонический способ преобразовать список целых чисел fs в список чисел с плавающей запятой – использовать однострочный код fs = [float (x) for x in fs]. Он перебирает все элементы в списке fs, используя понимание списка, и преобразует каждый элемент списка x в целочисленное значение с помощью конструктора float (x).
В этой статье показаны простейшие способы преобразования одномерного списка, состоящего только из целых чисел, в список чисел с плавающей запятой.
Проблема: Дан список целых чисел [1, 2, 3]
. Как его преобразовать в список чисел с плавающей запятой [1.0, 2.0, 3.0]
?
Способы неприменимы к спискам списков. При необходимости можно добавить циклы или определить пользовательские функции.
Метод 1: Список
Предположим у нас есть список:
a = [1, 3, 2, 1, 5, -2]
Проверим тип элементов списка:
print(type(a[0])) # <class 'int'>
Применим встроенную функцию float, получим список состоящий из чисел с плавающей точкой:
print([float(i) for i in a]) # [1.0, 3.0, 2.0, 1.0, 5.0, -2.0]
Проверим тип чисел в новом списке:
A = [float(i) for i in a] print(type(A[0])) # <class ‘float’>
Таким образом, используя встроенную функцию float, мы можем однострочным кодом получить новый список чисел с плавающей точкой.
Метод 2: Функция Map
Встроенная функция map, является хорошо оптимизированной и эффективной, при ее вызове элементы списка извлекаются при обращении, а следовательно в памяти находится и обрабатывается один элемент, что позволяет программе не хранить в памяти системы весь список элементов.
Применим к тому же списку ‘a’ код ниже:
print(list(map(float, a))) # [1.0, 3.0, 2.0, 1.0, 5.0, -2.0]
Проверять тип элементов полученного списка мы не будем, так как при вызове функции ‘map’ передали в нее уже описанную в методе 1 функцию ‘float’ в качестве аргумента, а результат обернули в список применением функции ‘list’.
Метод 3: Функция Enumerate
Используя встроенную функцию ‘enumerate’, мы можем пройтись по элементам списка и обрабатывать не только значение элемента, но и его номер индекса в списке:
for i, item in enumerate(a): a[i] = float(item) #[1.0, 3.0, 2.0, 1.0, 5.0, -2.0]
Метод 4: NumPy
Здесь рассмотрим преобразование списка из ‘int’ в массив c помощью модуля NumPy. Отличие массива от списка – все элементы массива должны быть одного типа, как “float’ и ‘int’. Числовые операции с большим объемом данных можно проводить с массивами гораздо быстрее и эффективнее чем со списками.
Превратим наш первый список ‘a’ в массив:
import numpy as np N = np.array(a, float) #[1., 3., 2., 1., 5., -2.]
В функцию array мы передаем два аргумента, имя списка для конвертации в массив и тип для каждого элемента.
Проверим тип элементов:
print(type(N[0])) #<class 'numpy.float64'>
В отличие от типа чисел ‘float’ в Python в модуле NumPy они определены несколько иначе и разделены на несколько подгрупп. Например, ‘float64’ – это числовой тип данных numpy, используемый для хранения вещественных чисел двойной точности, в которых 1 бит отводится под знак, 11 бит для экспоненты и 52 для мантиссы, ‘float32’ – содержит 1 бит для знака, 8 бит для экспоненты и 23 для мантиссы, ‘float16’ – 1 бит отводится под знак, 5 бит экспоненте и 10 для мантиссы. Это обязательно надо учитывать при вычислениях с массивами.