Сумму списка в Python считает встроенная функция sum(): напишите sum(numbers), и готово. Она принимает список, кортеж или любой другой итерируемый объект с числами и возвращает их сумму одним числом.
Дальше разберём задачи посложнее: суммирование с условием, вложенные списки и словари, подсчёт совпадений, деньги без потери копеек и типичные ошибки.
Если вы только начинаете писать на Python, держите под рукой и разбор цикла while: связка «циклы плюс суммирование» встречается в каждой второй учебной задаче.
КурсыСравнение 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 — столько положительных
Этот приём заменяет цикл со счётчиком и постоянно встречается в рабочем коде: посчитать строки с ошибкой, заказы дороже тысячи, просроченные задачи. Одна строка вместо четырёх.
Вложенные списки и сумма матрицы
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) |
Частые ошибки при суммировании
- Переменная с именем sum. Классика: написали
sum = 0, и дальше вызовsum(numbers)падает с ошибкойTypeError: 'int' object is not callable. Имя встроенной функции перекрыто переменной. Называйте счётчикtotalилиresult. - Строки внутри списка.
sum(["a", "b"])вызоветTypeError, причём Python сам подскажет решение прямо в тексте ошибки:use ''.join(seq) instead. Строки объединяют методомjoin(). - Смешанный список. Если среди чисел затесалась строка «12», получите ту же ошибку типов. Лечится преобразованием:
sum(int(x) for x in items). - None вместо числа. Данные из базы или API часто приходят с пропусками. Отфильтруйте их:
sum(x for x in items if x is not None).
Пустой список ошибкой не считается:
sum([])спокойно вернёт 0. Это удобно в циклах, где список иногда оказывается пустым.
Где освоить Python системно
Суммирование списка занимает одну строку, и таких строительных блоков в языке десятки: срезы, словари, генераторы, работа с файлами. Разница между «гуглю каждую задачу» и «пишу не отвлекаясь» набирается за пару месяцев практики по программе.
Если думаете о Python всерьёз, начните со статьи стоит ли учить Python, а курсы с ценами и отзывами собраны в каталоге:
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 175 800 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| Профессия «Python-разработчик с нуля до трудоустройства» Перейти на сайт курса | 87 500 ₽ | 5500 ₽/мес. | 6 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 666 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | 250 000 ₽/мес. | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python

