Функция sum: как суммировать элементы в Python

Раздел: Основы Python -> Встроенные функции

Функция sum в Python: обзор и применение

Функция sum - это встроенный инструмент для вычисления суммы элементов итерируемого объекта. Она принимает два аргумента: iterable (обязательный) и start (необязательный, по умолчанию 0). Наиболее эффективное решение - передать последовательность чисел напрямую:

numbers = [10, 20, 30, 40]
result = sum(numbers)
print(result)  # 100

Python max (функция max в python)

Функция работает с любым итерируемым объектом: списками, кортежами, множествами, генераторами.

Типичные ошибки:

  • Передача строк - вызовет TypeError, так как sum не предназначен для конкатенации строк (используйте ''.join()).
  • Пустой итератор: sum([]) вернет 0, это безопасно, но если нужна проверка на пустоту - используйте дополнительное условие.
  • Смешанные типы (строки + числа) приведут к ошибке.

Как задать начальное значение для суммы?

Параметр start позволяет начать суммирование с произвольного числа:

values = [1, 2, 3]
total = sum(values, 10)
print(total)  # 16

функция bin python (встроенная функция bin() в python)

Это удобно, когда нужно добавить фиксированную константу к итогу или работать с накопительными расчётами.

Если start не число, а, например, список, то функция попытается сложить элементы с помощью оператора +. Для списков это приведет к конкатенации, но работает крайне неэффективно из-за создания копий на каждой итерации. Лучше использовать itertools.chain.

Как суммировать элементы по условию?

Выражение-генератор внутри sum позволяет отфильтровать данные:

numbers = [1, 2, 3, 4, 5, 6]
even_sum = sum(n for n in numbers if n % 2 == 0)
print(even_sum)  # 12

Python id name (использование id() и name в python)

Такой подход не создает промежуточный список, экономя память.

Как суммировать результаты функции для каждого элемента?

Комбинация sum и map:

prices = [100, 200, 150]
with_tax = sum(map(lambda x: x * 1.2, prices))
print(with_tax)  # 540.0

команда open в python (команда open для открытия файлов в python)

Или с именованной функцией:

def double(x):
    return x * 2
values = [5, 10, 15]
total = sum(map(double, values))
print(total)  # 60

Enumerate python (функция enumerate в python)

Если map возвращает итератор, а последовательность очень большая, такой вариант не расходует лишнюю память.

Что делать, если нужно суммировать числа с плавающей точкой без ошибок округления?

Для критичных к точности расчётов применяют Decimal из модуля decimal:

from decimal import Decimal
decimals = [Decimal('0.1'), Decimal('0.2'), Decimal('0.3')]
total = sum(decimals)
print(total)  # 0.6

функция sum в python (функция sum в python)

Обычный float дал бы 0.6000000000000001.

Обратите внимание: sum с Decimal работает корректно, так как для них определён оператор сложения. Аналогично для Fraction.

Как объединить несколько списков в один с помощью sum?

Технически возможно (но не рекомендуется из-за квадратичной сложности):

list_of_lists = [[1, 2], [3, 4], [5, 6]]
flattened = sum(list_of_lists, [])
print(flattened)  # [1, 2, 3, 4, 5, 6]

Этот способ создает новый список на каждом шаге. Для больших данных лучше использовать itertools.chain.from_iterable.

Проблема проявляется с ростом числа вложенных списков - время работы растёт квадратично. В учебных целях пример допустим, но не для продакшена.

Расширенные примеры использования sum

Суммирование комплексных чисел

Пример
complex_nums = [1+2j, 3-1j, 4+5j]
result = sum(complex_nums)
print(result)  # (8+6j)

Использование с генератором бесконечной последовательности (ограниченным)

Пример
def generate_values(n):
    for i in range(n):
        yield i * 2

total = sum(generate_values(1000000))
print(total)  # 999999000000

Генератор не хранит все значения в памяти.

Суммирование с помощью itertools.chain (объединение итераторов)

Пример
import itertools

seq1 = [1, 2, 3]
seq2 = (4, 5)
seq3 = {6, 7}
combined = itertools.chain(seq1, seq2, seq3)
total = sum(combined)
print(total)  # 28

Работа с Fraction (дроби)

Пример
from fractions import Fraction
fractions = [Fraction(1, 2), Fraction(1, 3), Fraction(1, 6)]
total = sum(fractions)
print(total)  # 1

Суммирование с использованием Decimal и контекстом точности

Пример
from decimal import Decimal, getcontext
getcontext().prec = 50
decimals = [Decimal('1.12345678901234567890'), Decimal('2.98765432109876543210')]
total = sum(decimals)
print(total)  # 4.11111111011111111100

Производительность: sum vs reduce vs цикл

Пример
import time
from functools import reduce

numbers = list(range(10**7))

start = time.time()
total = sum(numbers)
print('sum:', time.time() - start)

start = time.time()
total = reduce(lambda a, b: a + b, numbers)
print('reduce:', time.time() - start)

start = time.time()
total = 0
for n in numbers:
    total += n
print('loop:', time.time() - start)
sum: 0.08
reduce: 0.35
loop: 0.28

Видно, что sum - самая быстрая за счёт реализации на C.

Суммирование с обработкой ошибок (типы)

Пример
mixed = [1, 2, '3']
try:
    total = sum(mixed)
except TypeError as e:
    print(f"Ошибка: {e}")
Ошибка: unsupported operand type(s) for +: 'int' and 'str'

Использование sum для подсчёта логических значений

Пример
booleans = [True, False, True, True, False]
count_true = sum(booleans)
print(count_true)  # 3

Функция sum в Python - comments

En
функция sum в python (python)