Модуль 3 · Списки и циклы

Справочник по Python · модуль 3 · списки и циклы

Глава 3.15

3.15

Функция sum()

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

Категория
Встроенные функции
Уровень
Средний
Связанные темы
Коллекции, циклы, логические значения
Зачем это знать
Суммировать и считать без ручного накопителя

§1Назначение и синтаксис

sum(iterable, start=0) складывает элементы iterable, начиная со значения start. Второй аргумент необязателен.

ПараметрЧто передаёмПо умолчанию
iterableобъект, который выдаёт складываемые значенияобязателен
startзначение, прибавляемое до элементов0

§2Обычная сумма

main.pyсумма списка
numbers = [1, 2, 3, 4]
result = sum(numbers)
print(result)
Вывод1 + 2 + 3 + 4
10

Ручной цикл дал бы тот же результат, но потребовал бы отдельно создать переменную-накопитель и обновлять её на каждой итерации.

§3Параметр start

Начальное значение не заменяет первый элемент. Оно прибавляется к сумме всех элементов.

main.py10 + 1 + 2 + 3
numbers = [1, 2, 3]
result = sum(numbers, 10)
print(result)
Выводначали с десяти
16

§4Разные итерируемые объекты

sum() принимает не только список. Важно не название типа, а возможность получить из объекта складываемые значения.

main.pyкортеж, множество и range
values = (5, 10, 15)
unique = {1, 2, 3, 4}
print(sum(values))
print(sum(unique))
print(sum(range(5)))
Выводтри суммы
30
10
10

§5Пустая коллекция

Без элементов результат равен начальному значению. Поэтому sum([]) возвращает 0, а не вызывает ошибку.

main.pyзначение start становится ответом
print(sum([]))
print(sum([], 100))
Выводдва начальных значения
0
100

§6Подсчёт элементов по условию

В арифметике Python True ведёт себя как 1, а False — как 0. Поэтому сумма результатов проверок равна количеству выполненных условий.

main.pyсколько чисел больше двух
numbers = [1, 2, 3, 4, 5]
checks = [number > 2 for number in numbers]
print(checks)
print(sum(checks))
Выводтри значения True
[False, False, True, True, True]
3

§7Сумма преобразованных значений

Внутри sum() можно формировать каждое слагаемое. Такая запись не требует заранее создавать отдельный список квадратов.

main.pyсумма квадратов
numbers = [1, 2, 3]
result = sum(number ** 2 for number in numbers)
print(result)
Вывод1 + 4 + 9
14

Конструкцию внутри скобок подробно разберём в следующей главе. Пока достаточно читать её как «квадрат каждого числа из numbers».

§8Объединение списков и строк

sum(lists, []) способен объединить небольшие списки, но многократно создаёт промежуточные списки. Для крупных данных лучше использовать специализированные способы.

main.pyнебольшой учебный пример
groups = [[1, 2], [3, 4], [5, 6]]
print(sum(groups, []))
Вывододин плоский список
[1, 2, 3, 4, 5, 6]
Строки складывать нельзя

sum(["Hello", "World"], "") вызывает TypeError. Для объединения строк используйте " ".join(words).

main.pyобъединение через join()
words = ["Hello", "World"]
result = " ".join(words)
print(result)
Выводстрока с пробелом
Hello World

§9Частые ошибки

Что написаноЧто произойдётКак правильно
sum(1, 2, 3)TypeError: первым аргументом должен быть один итерируемый объектsum([1, 2, 3])
sum([1, 2, "3"])TypeError: число и строку нельзя сложитьпреобразовать данные к числам заранее
sum(words, "")TypeError: sum() запрещает строковый start"".join(words)
sum(numbers, 10) считают заменой первого числа10 прибавится ко всем элементамчитать start как начальное значение накопителя
объединять через sum() тысячи списковсоздаётся много промежуточных списковвыбрать способ без повторного копирования данных

§10Проверьте себя

Чему равно sum([], 7)?

7: элементов нет, поэтому результатом остаётся начальное значение.

Что означает второй аргумент sum()?

Начальное значение, к которому прибавляются все элементы.

Как объединить список строк?

Методом separator.join(words), например " ".join(words).

§11Шпаргалка

Суммаsum(numbers)
Начальное значениеsum(numbers, start)
Количество истинныхsum(checks)
Строкиseparator.join(words)

Итог главы

sum() складывает значения из одного итерируемого объекта. Необязательный start задаёт начальное значение, пустая коллекция возвращает именно его, а сумма логических результатов позволяет подсчитать выполненные условия. Для строк используется join().

Глава 3.15 · Функция sum() · Справочник по PythonАвтор: Макаров Максим Николаевич