Баннер мобильный (3) Пройти тест

Функция sum в Python: что это и как использовать

Получаем сумму быстро и удобно

Инструкция

26 декабря 2025

Поделиться

Скопировано
Функция sum в Python: что это и как использовать

Содержание

    Узнаем, что такое и для чего была придумана функция sum в Python. На нескольких несложных примерах рассмотрим, как ее использовать.

    Что такое функция sum и для чего она нужна

    Допустим, нам нужно вычислить сумму всех чисел, входящих в следующую последовательность:

    5, 2, 7, 11, 1, 20

    Как это сделать? Можно использовать цикл for таким образом:

    numbers = [5, 2, 7, 11, 1, 20]
    total = 0
    
    for number in numbers:
        total += number
    
    print(total)

    Здесь мы создали список чисел и с помощью цикла последовательно перебираем его элементы, прибавляя к все увеличивающейся сумме total следующий элемент списка. Или же можно воспользоваться циклом while:

    numbers = [5, 2, 7, 11, 1, 20]
    total = 0
    index = 0
    
    while index < len(numbers):
        total += numbers[index]
        index += 1
    
    print(total)

    В этом варианте мы в условии цикла сравниваем переменную index с длиной списка. Если значение переменной index будет меньше длины списка, то к сумме total прибавляется число из списка с соответствующим индексом. Последняя команда в теле цикла увеличивает переменную index на единицу. И в том и в другом случае в результате получим такой вывод в консоли:

    46

    Но точно такой же результат можно получить и без всяких циклов. В языке Python есть очень полезная встроенная функция sum, которая специально создана для вычисления суммы элементов итерируемых объектов. Синтаксис у нее очень простой:

    sum(iterable, start=0)

    Параметр iterable — это последовательность, элементы которой нужно суммировать. В качестве такой последовательности могут выступать списки, множества, кортежи и так далее. Параметр start является необязательным и определяет начальное значение, к которому добавляется сумма элементов. По умолчанию этот параметр равен нулю. Если применить функцию sum для нашего примера, то получим уже вот такой код:

    numbers = [5, 2, 7, 11, 1, 20]
    
    total = sum(numbers)
    
    print(total)

    Как видим, вместо пяти строчек кода с циклом for или семи с циклом while использовано всего три. В консоли получим все то же число 46.

    Применение функции sum без параметра start

    Выше мы уже посмотрели, как при помощи функции sum получить сумму целых чисел из списка. Таким же образом можно получить и сумму чисел с плавающей точкой. Вот простой пример:

    float_numbers = [1.6, 2.3, 3.4, 5.2]
    result = sum(float_numbers)
    
    print(result)

    Результат в консоли:

    12.5

    Также при помощи этой функции легко суммировать числа, находящиеся в кортеже:

    tuple_numbers = (100, 200, 300, 400, 500)
    result = sum(tuple_numbers)
    
    print(result)

    Результат:

    1500

    Элементы множества тоже прекрасно суммируются:

    set_numbers = {50, 1000, 26, 149}
    result = sum(set_numbers)
    
    print(result)

    Вывод в консоли:

    1225

    Еще функция sum умеет работать с генераторами. Например, чтобы узнать сумму кубов чисел от 1 до 6, потребуется написать всего пару строчек:

    sum_of_cubes = sum(x**3 for x in range(1, 7))
    
    print(sum_of_cubes)

    Генератор подается на вход функции sum и создает последовательность кубов, а функция sum просто их складывает. Получим следующий результат:

    441

    Также можно дополнять генераторы условиями. Вот так, например, можно вычислить сумму всех нечетных чисел от 1 до 100:

    result = sum(x for x in range(1, 101) if x % 2 != 0)
    
    print(result)

    Условие истинно, если только остаток от деления числа на 2 не равен нулю. Это и означает, что число является нечетным. Благодаря этому условию генератор создаст последовательность, состоящую только из нечетных чисел в заданном диапазоне, а функция sum их все сложит. Получим такой вывод:

    2500

    Функция sum также умеет суммировать булевые значения. Простой пример:

    booleans = [True, False, True, True, False, True, False, False]
    count_true = sum(booleans)
    
    print(count_true)

    В консоли получим вывод:

    4

    Такой результат получаем из-за того, что в списке значение True встречается четыре раза. Значение True приводится к единице, а False — к нулю. Эта способность функции sum может быть применена при подсчете определенных элементов в списках. Допустим, что у нас имеется список чисел и нам надо подсчитать количество чисел, которые больше 10. Это можно сделать так:

    numbers = [3, 16, 2, 38, 4, 9, 11, 6, 58, 29]
    result = sum(1 for number in numbers if number > 10)
    
    print(result)

    Вывод:

    5

    Применение функции sum с параметром start

    Параметр start нужен для задания начального значения, к которому добавляется сумма элементов. Параметр этот необязательный, но довольно полезный. Вот самый простой пример, увеличивающий сумму элементов списка на 100:

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

    Результат:

    250

    Без параметра start (при его нулевом значении) мы бы получили значение, равное 150. Также этот параметр можно использовать вместе с генераторами:

    result = sum((x**2 for x in range(1, 8)), 1000)
    
    print(result)

    Генератор создает последовательность квадратов чисел от 1 до 7. Все эти квадраты складываются, и к получившейся сумме добавляется число 1000. В консоли получим следующий вывод:

    1140

    Также этот параметр можно использовать для объединения списков:

    first_list = [1, 2, 3, 4, 5]
    second_list = [6, 7, 8, 9, 10]
    combined_list = sum([first_list, second_list], [])
    
    print(combined_list)

    Это довольно необычное применение функции sum с параметром start. Для объединения списков лучше всего использовать оператор + или метод extend. Вариант с оператором +:

    first_list = [1, 2, 3, 4, 5]
    second_list = [6, 7, 8, 9, 10]
    combined_list = first_list + second_list
    
    print(combined_list)

    С методом extend:

    first_list = [1, 2, 3, 4, 5]
    second_list = [6, 7, 8, 9, 10]
    first_list.extend(second_list)
    
    print(first_list)

    Во всех трех случаях результат в консоли будет один и тот же:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    Более подробно о списках в Python и о том, как с ними работать, можно прочитать в этой статье.

    Работа со строками и вложенными списками

    Выше мы видели, что функция sum прекрасно справляется со сложением чисел. А если попробовать сложить строки? Попытаемся выполнить следующий код:

    hello_world = sum(['Привет', ', ', 'Мир!'])
    
    print(hello_world)

    И получим в консоли вот такое сообщение:

    Traceback (most recent call last):
      File "/home/alex/OpenideProjects/py-examples/examples.py", line 2, in <module>
        hello_world = sum(['Привет', ', ', 'Мир!'])
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: unsupported operand type(s) for +: 'int' and 'str'

    То есть такой тип данных не поддерживается. Для конкатенации строк из нашего примера лучше всего подойдет такой код:

    hello_world = ''.join(['Привет', ', ', 'Мир!'])
    
    print(hello_world)

    Результат:

    Привет, Мир!

    Также есть проблема со вложенными структурами. Функция sum не умеет рекурсивно суммировать вложенные списки. Эти списки сначала придется подвергнуть предварительной обработке. Пример:

    lists = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    result = sum([sum(sublist) for sublist in lists])
    
    print(result)

    У нас есть список, состоящий из пяти подсписков. Чтобы вычислить сумму всех элементов списка, пришлось использовать вложенную функцию sum. Вложенная функция суммирует элементы подсписков, пробегая их при помощи цикла for. Внешняя функция sum складывает получившиеся пять слагаемых. Этот же список можно обработать и по-другому. Но для этого придется использовать модуль itertools:

    from itertools import chain
    
    lists = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    result = sum(chain.from_iterable(lists))
    
    print(result)

    И в том и в другом случае в консоли получим следующий результат:

    55

    Еще три примера применения функции sum

    Рассмотрим дополнительно еще три полезных практических примера, где используется функция sum.

    Расчет среднего арифметического

    Допустим, у нас есть следующая последовательность чисел:

    20, 38, 4, 243, 3, 6, 414, 2

    Нужно узнать среднее арифметическое этих чисел. Как это сделать? Необходимо сумму всех чисел последовательности разделить на количество чисел в этой последовательности. Получаем такой код:

    numbers = [20, 38, 4, 243, 3, 6, 414, 2]
    result = sum(numbers) / len(numbers)
    
    print(result)

    Функция sum вычисляет сумму чисел в списке numbers, а функция len рассчитывает длину списка. В консоли получим:

    91.25

    Сумма элементов главной диагонали матрицы

    Матрица — это прямоугольная таблица, состоящая из чисел или других математических объектов. Каждая матрица имеет некоторый размер, который определяется количеством строк и столбцов.

    Главная диагональ матрицы — это диагональ, включающая в себя элементы, которые находятся на строках и столбцах, имеющих одинаковые номера. Отсчет строк идет сверху вниз, а отсчет столбцов — слева направо. То есть, если нам дана такая матрица:

    10  20  30

    40  50  60

    70  80  90,

    то главная диагональ у нее проходит по элементам 10, 50 и 90. Так как номера строк и столбцов у этих элементов совпадают, то программа для вычисления их суммы будет выглядеть следующим образом:

    matrix = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
    main_diagonal_sum = sum(matrix[i][i] for i in range(len(matrix)))
    print(main_diagonal_sum)

    Каждая строка матрицы представлена отдельным подсписком. Всего их три, и все они входят в состав общего списка matrix. Далее при помощи простенького генератора пробегаемся по главной диагонали матрицы и функцией sum складываем ее элементы. В консоли получим:

    150

    Нахождение скалярного произведения

    Скалярное произведение двух последовательностей — это алгебраическая сумма произведений каждой соответствующей пары значений из этих последовательностей. Этими последовательностями могут быть, например, координаты векторов. Пусть нам даны две такие последовательности:

    a=a1,a2,a3

    b=b1,b2,b3

    Значит, скалярное произведение этих последовательностей рассчитывается так:

    ab=a1b1+a2b2+a3b3

    Для того чтобы вычислить скалярное произведение на Python, воспользуемся функцией sum с генератором для умножения пар значений и функцией zip для извлечения этих самых пар значений. Код:

    a_vector = (1, 12, 6)
    b_vector = (4, 15, 10)
    
    result = sum(a * b for a, b in zip(a_vector, b_vector))
    
    print(result)

    Нам даны два вектора в трехмерном пространстве. Функция zip поочередно извлекает пары значений из координат векторов, а генератор их перемножает. Функция sum складывает эти произведения. Результат в консоли будет таким:

    244

    Задание для самостоятельной практики

    Даны четыре строчки из стихотворения Николая Некрасова «Крестьянские дети»:

    Однажды, в студёную зимнюю пору,

    Я из лесу вышел; был сильный мороз.

    Гляжу, поднимается медленно в гору

    Лошадка, везущая хворосту воз.

    Требуется подсчитать количество гласных букв при помощи функции sum.

    Решение

    Сначала создадим переменную text, в которую положим четыре строчки стихотворения:

    text = ("Однажды, в студёную зимнюю пору,"
            "Я из лесу вышел; был сильный мороз."
            "Гляжу, поднимается медленно в гору"
            "Лошадка, везущая хворосту воз.")

    Далее создадим переменную vowels со всеми гласными буквами:

    vowels = "аеёиоуыэюя"

    Теперь можно применить функцию sum. В ней запустим генератор с условием. Условие будет возвращать значение True, только если попадется гласная буква, а генератор создаст последовательность единиц для каждой найденной гласной буквы. Функция sum, в свою очередь, посчитает все эти единицы. Также, чтобы не учитывать буквы в разных регистрах, при помощи функции lower переводим весь текст в нижний регистр:

    vowel_count = sum(1 for char in text.lower() if char in vowels)

    Осталось только вывести результат в консоль:

    print(vowel_count)

    Весь код будет выглядеть так:

    text = ("Однажды, в студёную зимнюю пору,"
            "Я из лесу вышел; был сильный мороз."
            "Гляжу, поднимается медленно в гору"
            "Лошадка, везущая хворосту воз.")
    
    vowels = "аеёиоуыэюя"
    
    vowel_count = sum(1 for char in text.lower() if char in vowels)
    print(vowel_count)

    В консоли получим следующий вывод:

    46

    (Конец решения)

    Инструкция

    Поделиться

    Скопировано
    0 комментариев
    Комментарии