Как суммировать список в Python — sum(), цикл for и NumPy

Сумму списка в Python считает встроенная функция sum(): одна строка кода без циклов и библиотек. В статье примеры посложнее: суммирование с условием, вложенные списки, поэлементное сложение двух списков через zip() и четыре ошибки, на которых новички теряют больше всего времени.
Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 1114 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 1775 экспертных мнений Подписаться на Телеграм-канал
Обложка: Как суммировать список в Python — sum(), цикл for и NumPy

Сумму списка в Python считает встроенная функция sum(): напишите sum(numbers), и готово. Она принимает список, кортеж или любой другой итерируемый объект с числами и возвращает их сумму одним числом.

Дальше разберём задачи посложнее: суммирование с условием, вложенные списки и словари, подсчёт совпадений, деньги без потери копеек и типичные ошибки.

Если вы только начинаете писать на Python, держите под рукой и разбор цикла while: связка «циклы плюс суммирование» встречается в каждой второй учебной задаче.

Курсы по PythonКурсыСравнение 539 курсов по Python632 курса: цены, школы, рассрочка

Функция sum() — основной способ

numbers = [10, 25, 7, 42, 16]
print(sum(numbers))  # 100

Работает с целыми и дробными числами одинаково. Вторым аргументом можно передать начальное значение, оно прибавится к итогу:

print(sum(numbers, 100))  # 200

Если числа лежат в списке строками, например после чтения из файла, сначала преобразуйте их. Удобнее всего генераторным выражением прямо внутри sum():

raw = ["10", "25", "7"]
print(sum(int(x) for x in raw))  # 42

Из суммы одним шагом получается и среднее значение:

print(sum(numbers) / len(numbers))  # 20.0

Отдельная функция среднего есть в модуле statistics (statistics.mean()), но для одного расчёта деление короче.

Сумма через цикл for

Цикл нужен, когда по дороге к сумме требуется логика: пропустить часть элементов, что-то залогировать, остановиться по условию.

numbers = [10, 25, 7, 42, 16]
total = 0
for n in numbers:
    if n % 2 == 0:      # берём только чётные
        total += n
print(total)  # 68

Для простого фильтра цикл разворачивать не обязательно. Та же логика помещается в одну строку:

print(sum(n for n in numbers if n % 2 == 0))  # 68

Читается короче, работает так же. Цикл оставьте для случаев, где внутри больше одного действия.

Подсчёт по условию — трюк с булевыми значениями

В Python True ведёт себя как 1, а False как 0. Поэтому sum() умеет считать, сколько элементов подходит под условие:

numbers = [10, -3, 25, -7, 42]
print(sum(n > 0 for n in numbers))  # 3 — столько положительных

Этот приём заменяет цикл со счётчиком и постоянно встречается в рабочем коде: посчитать строки с ошибкой, заказы дороже тысячи, просроченные задачи. Одна строка вместо четырёх.

Ваня Буявец, продюсер, основатель CheckroiВаня Буявец, основатель CheckroiПоказываю, как применять Claude Code, ChatGPT и другие нейросети в учёбе и работе, с примерами и промптамиЧитать в Телеграме

Вложенные списки и сумма матрицы

sum() не заглядывает внутрь вложенных списков, поэтому матрицу суммируют в два прохода: сначала каждую строку, затем результаты.

matrix = [[1, 2], [3, 4], [5, 6]]
print(sum(sum(row) for row in matrix))  # 21

Есть и связанный трюк: sum() со стартовым значением [] склеивает список списков в один плоский:

lists = [[1, 2], [3, 4], [5]]
print(sum(lists, []))  # [1, 2, 3, 4, 5]

Склейка через sum() удобна в однострочниках, но на сотнях списков работает медленно: каждый шаг создаёт новый список. Для больших объёмов берите itertools.chain, результат тот же и без лишних копий.

Сумма значений словаря

Словарь суммируется через метод values():

sales = {"январь": 120, "февраль": 95, "март": 140}
print(sum(sales.values()))  # 355

А в списке словарей, например корзине заказа, суммируют по нужному ключу генератором:

cart = [
    {"name": "мышь", "price": 990},
    {"name": "клавиатура", "price": 2490},
]
print(sum(item["price"] for item in cart))  # 3480

Этот шаблон покрывает почти любую работу с данными из JSON и API: достали значение по ключу, просуммировали одной строкой.

«Сложить списки» — это другая задача

По формулировке «как сложить списки» люди ищут два разных действия, и стоит их развести.

Объединить списки в один — оператор +:

a = [1, 2]
b = [3, 4]
print(a + b)  # [1, 2, 3, 4]

Поэлементная сумма двух списков — zip():

print([x + y for x, y in zip(a, b)])  # [4, 6]

Оператор + во втором случае молча даст склейку вместо сложения, и эту ошибку легко не заметить в вычислениях.

Деньги и дроби — как не потерять копейки

Дробные числа в двоичной арифметике хранятся с погрешностью. В старых версиях Python sum([0.1] * 10) возвращает 0.9999999999999999; начиная с Python 3.12 функция считает дроби с компенсацией и выдаёт ровно 1.0.

Для денежных расчётов в любой версии надёжнее модуль Decimal: он хранит числа десятично и не накапливает погрешность.

from decimal import Decimal
prices = [Decimal("199.90"), Decimal("49.05"), Decimal("0.05")]
print(sum(prices))  # 249.00

Правило простое: проценты и физика терпят float, бухгалтерия требует Decimal.

NumPy для больших массивов

Когда элементов сотни тысяч, встроенная функция начинает заметно уступать библиотеке NumPy: np.sum(arr) считает на порядок быстрее за счёт векторизации.

Ради одной суммы ставить библиотеку смысла нет. Но если вы работаете с массивами данных постоянно, она в проекте уже наверняка есть, и её sum должен быть первым выбором.

Шпаргалка — какой приём выбрать

Задача Приём
Сумма всех чисел списка sum(numbers)
Сумма с условием sum(n for n in numbers if ...)
Сколько элементов подходит под условие sum(n > 0 for n in numbers)
Сумма значений словаря sum(d.values())
Сумма по ключу в списке словарей sum(item["price"] for item in cart)
Сумма матрицы sum(sum(row) for row in matrix)
Склеить список списков sum(lists, []), на больших — itertools.chain
Поэлементная сумма двух списков [x + y for x, y in zip(a, b)]
Деньги sum() поверх Decimal
Сотни тысяч чисел np.sum(arr)
Канал основателя Checkroi Вани БуявцаПоказываю тебе, как публично строю Checkroi с нейросетями и делюсь цифрами, провалами и тем, что сработалоПодписаться

Частые ошибки при суммировании

  1. Переменная с именем sum. Классика: написали sum = 0, и дальше вызов sum(numbers) падает с ошибкой TypeError: 'int' object is not callable. Имя встроенной функции перекрыто переменной. Называйте счётчик total или result.
  2. Строки внутри списка. sum(["a", "b"]) вызовет TypeError, причём Python сам подскажет решение прямо в тексте ошибки: use ''.join(seq) instead. Строки объединяют методом join().
  3. Смешанный список. Если среди чисел затесалась строка «12», получите ту же ошибку типов. Лечится преобразованием: sum(int(x) for x in items).
  4. None вместо числа. Данные из базы или API часто приходят с пропусками. Отфильтруйте их: sum(x for x in items if x is not None).

Пустой список ошибкой не считается: sum([]) спокойно вернёт 0. Это удобно в циклах, где список иногда оказывается пустым.

Где освоить Python системно

Суммирование списка занимает одну строку, и таких строительных блоков в языке десятки: срезы, словари, генераторы, работа с файлами. Разница между «гуглю каждую задачу» и «пишу не отвлекаясь» набирается за пару месяцев практики по программе.

Если думаете о Python всерьёз, начните со статьи стоит ли учить Python, а курсы с ценами и отзывами собраны в каталоге:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология175 800 ₽7125 ₽/мес.21 месяцОбзор курса
Профессия «Python-разработчик с нуля до трудоустройства»
Перейти на сайт курса
НетологияНетология87 500 ₽5500 ₽/мес.6 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 666 ₽4108 ₽/мес.9 месяцевОбзор курса
Программирование на Python ПРО
Перейти на сайт курса
SkillboxSkillbox119 600 ₽250 000 ₽/мес.17 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Как посчитать сумму списка без функции sum()?

Циклом for: создайте переменную total = 0 и прибавляйте к ней каждый элемент списка. Так решают учебные задачи, где встроенные функции использовать запрещено.

Что вернёт sum() для пустого списка?

Ноль. Ошибки не будет, поэтому sum() безопасно применять к спискам, которые иногда оказываются пустыми, например после фильтрации данных.

Как посчитать сумму только чётных или положительных чисел?

Условием внутри генераторного выражения: sum(n for n in numbers if n % 2 == 0). Вместо проверки на чётность подставьте любое своё условие.

Почему sum() выдаёт ошибку TypeError?

Либо в списке есть строки, тогда преобразуйте элементы через int() или float(), либо вы назвали переменную sum и перекрыли встроенную функцию. Во втором случае переименуйте переменную, например в total.

Как сложить два списка поэлементно?

Через zip(): [x + y for x, y in zip(a, b)] вернёт список попарных сумм. Оператор + числа не складывает, он склеивает два списка в один длинный.

Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!