Как посчитать сумму элементов списка в Python?
Нужно сложить все числа в списке. Пишу цикл с накоплением в переменную, но наверняка есть встроенная функция. Как быстро посчитать сумму, и можно ли сложить только часть элементов по условию?
2 ответа
Цикл не нужен — есть встроенная sum():
nums = [10, 20, 30]
print(sum(nums)) # 60
Можно задать начальное значение вторым аргументом (к нему прибавится сумма):
sum(nums, 100) # 160
Чтобы сложить не всё, а по условию, объедините sum с генератором:
# сумма только положительных
sum(x for x in nums if x > 0)
# сумма квадратов
sum(x**2 for x in nums)
Генератор в круглых скобках экономнее списка — он не создаёт промежуточный список, а отдаёт числа sum-у по одному.
Для списка словарей суммируйте нужное поле:
total = sum(p['price'] for p in cart)
Частые ошибки:
sumскладывает числа. Если в списке строки, будетTypeError. Для склейки строк используйте''.join(...), а неsum.sum(['a', 'b'])именно поэтому падает — это не способ объединить строки.- Не называйте переменную
sum— затрёте встроенную функцию.
Дополнительно: min, max, len работают по той же логике, а для среднего нужно sum(nums) / len(nums) (проверяйте, что список не пуст, иначе деление на ноль).
Маленький нюанс: при сложении большого количества дробных чисел sum может накопить ошибку плавающей точки. Если нужна повышенная точность, есть math.fsum:
import math
math.fsum([0.1, 0.1, 0.1]) # 0.3 точнее, чем sum
Для целых чисел и обычных задач разницы нет — берите простую sum. fsum пригодится в научных расчётах, где складываются тысячи дробей.