Как получить сумму всех чисел в списке?
Как получить сумму чисел в списке?
Список состоит из чисел в виде str, с плавающей точкой.
Конвертировал список из str в int, тогда можно применить sum(), но все числа округляются, это не подходит, падает точность расчетов.
Что было сделано?
some_list = ['0.11', '0.09', '1.0', '0.5', '0.33', '0.25', '0.2', '0.2', '0.16', '0.14', '0.07', '0.03', '0.01', '1.81']
res = [int(itm) for itm in some_list]
res2 = list(map(int, some_list))
Как преобразовать список в числа и получить их сумму, как одну запись в списке?
Пример:
some_list = [24.25]
Ответы (2 шт):
Нужно конвертировать не в int, а в float, хотя операции с плавающей точкой могут быть не очень точными и это надо иметь ввиду.
math.fsum(list(map(float, some_list)))
Для более точных расчетов можно поискать библиотеки, к примеру какой-нибудь bigfloat https://pypi.org/project/bigfloat/.
Здесь, конечно, напрашиваеся использование стандартной библиотеки decimal. В ней десятичные числа могут быть представлены точно, как в школе. И эти числа хорошо взаимодействуют с большей частью Python.
Поэтому код получается таким:
import decimal as d
some_list = ['0.11', '0.09', '1.0', '0.5', '0.33', '0.25',
'0.2', '0.2', '0.16', '0.14', '0.07', '0.03', '0.01', '1.81']
print(sum(list(map(d.Decimal, some_list))))
Сначала преобразуем список строк в список десятичных "цифр" и затем суммируем. Получаем точный результат.