Сообщить об ошибке.

Функция sum() в Python, сумма последовательности.

Вычисляет сумму всех элементов в последовательности.

Синтаксис:

sum(iterable, /, start=0)

Параметры:

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

Возвращаемое значение:

  • сумма элементов.

Описание:

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

Функция sum() ожидает, что элементы iterable являются числами, а начальное значение start не может быть строкой. Если аргумент iterable пуст, то функция sum() возвращает начальное значение start, если оно указано.

Для некоторых случаев использования функции sum() есть хорошие альтернативы:

Изменено в Python 3.8: Параметр start может быть указан как аргумент ключевого слова.

Примеры вычисления суммы разных последовательностей.

Стандартные приемы вычисления суммы.

>>> x = []
>>> sum(x)
# 0

# Сумма чисел, переданных 
# в качестве аргументов (каждая отдельно).
>>> sum(x, 10)
# 10

# сумма списка целых чисел
>>> x = [1, 2, 3, 4]
>>> sum(x, 10)
# 20

# сумма списка целых и десятичных чисел
>>> x = [1.1, 2.2, 3.3, 4.256]
>>> sum(x, 1)
# 11.856000000000002
>>>

Вычисление суммы списка строк с числами.

Для преобразования списка строк с числами включая десятичные c разделением их по типам int и float, необходимо перед преобразованием в тип float проверять строку на вхождение точки '.'.

Для проверки строки на целое число перед преобразованием проверим, что строка состоит только из десятичных чисел str.isdigit().

После выполнения всех преобразований применим функцию sum().

>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', 'пять', '15', '13', '7', '13.9', 'число']
>>> def str_to_num(str):
...     str = str.strip()
...     if '.' in str and str.replace('.', '').isdigit():
...         return float(str)
...     elif str.isdigit():
...         return int(str)
... 
>>> num_list = []
>>> for i in str_list:
...     n = str_to_num(i)
...     if n is not None:
...         num_list.append(str_to_num(i))

>>> num_list
# [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9]
>>> sum(num_list)
# 86.2

Подсчет суммы чисел в строке разделенных пробелами/запятыми/подстрокой.

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

Это можно сделать следующими способами:

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

>>> line = '8.3 11 девять 1 5 3 9 пять 15 13 7 13.9 число'
# 1 - используем метод строки str.split()
>>> str_list = line.split(' ')
>>> str_list
# ['8.3', '11', 'девять', '1', '5', '3', '9', 'пять', '15', '13', '7', '13.9', 'число']

# 3 способ - используем функцию re.findall()
>>> line = '8.3 11 девять. 1 5 3 9 пять 15 13 7 13.9 число'
>>> match = re.findall(r'[\d\.?,?]+', line)
>>> list(match)
# ['8.3', '11', '1', '5', '3', '9', '15', '13', '7', '13.9']

# Далее будем делать то же самое что и в предыдущем примере
...
# Выполняем преобразование списка строк с 
# числами str_list в  список целых и десятичных чисел
...

# в итоге преобразований, описанных в предыдущем
# примере получаем список чисел, к которым 
# применим функцию 'sum()'
>>> num_list
# [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9]
>>> sum(num_list)
# 86.2

Подсчет суммы цифр в числе.

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

Алгоритм действий будет следующим:

  • преобразуем число в строку при помощи функции str();
  • число может быть как int, так и float, следовательно необходимо произвести замену десятичного разделителя '.' при помощи строкового метода str.replace();
  • преобразовываем полученную строку с числом в список строк с цифрами функцией list();
  • далее преобразовываем каждый элемент полученного списка строк с цифрами в список целых чисел используя функцию map();
  • применяем функцию sum() к итоговому списку.
>>> pi = 3.1415926
# число в строку
>>> str_pi = str(pi)
# производим замену десятичного разделителя
>>> str_pi = str_pi.replace('.', '')
# строку с числом в список строк с цифрами
>>> lst_str = list(str_pi)
# преобразовываем каждый элемент полученного
# списка строк с цифрами в список целых чисел
>>> lst_num = map(int, lst_str)
# применяем функцию `sum()`
>>> s = sum(lst_num)
>>> s
# 31