← Все вопросы

Как посчитать сумму элементов списка в Python?

Задан 25 месяцев назад1.3к просмотров2 ответа
8

Нужно сложить все числа в списке. Пишу цикл с накоплением в переменную, но наверняка есть встроенная функция. Как быстро посчитать сумму, и можно ли сложить только часть элементов по условию?

2 ответа

12
✓ Принятый ответ — помог автору

Цикл не нужен — есть встроенная 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)

Частые ошибки:

  1. sum складывает числа. Если в списке строки, будет TypeError. Для склейки строк используйте ''.join(...), а не sum.
  2. sum(['a', 'b']) именно поэтому падает — это не способ объединить строки.
  3. Не называйте переменную sum — затрёте встроенную функцию.

Дополнительно: min, max, len работают по той же логике, а для среднего нужно sum(nums) / len(nums) (проверяйте, что список не пуст, иначе деление на ноль).

4

Маленький нюанс: при сложении большого количества дробных чисел sum может накопить ошибку плавающей точки. Если нужна повышенная точность, есть math.fsum:

import math
math.fsum([0.1, 0.1, 0.1])   # 0.3 точнее, чем sum

Для целых чисел и обычных задач разницы нет — берите простую sum. fsum пригодится в научных расчётах, где складываются тысячи дробей.

Ваш ответ

, чтобы ответить на вопрос.