Как преобразовать список целых чисел в список чисел с плавающей запятой в Питоне

Самый питонический способ преобразовать список целых чисел 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 для мантиссы. Это обязательно надо учитывать при вычислениях с массивами.