sum(iterable, /, start=0)
iterable
- объект, поддерживающий итерацию,start
- число, начальное значение для суммы.Функция sum()
начинает суммирование элементов последовательности iterable
с начального значения start
, если оно указано, сложение происходит слева направо и в результате возвращает их сумму.
Функция sum()
ожидает, что элементы iterable
являются числами, а начальное значение start
не может быть строкой. Если аргумент iterable
пуст, то функция sum()
возвращает начальное значение start
, если оно указано.
Для некоторых случаев использования функции sum()
есть хорошие альтернативы:
math.fsum()
.str.join(sequence)
.itertools.chain()
.Изменено в 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
В этом случае необходимо сначала преобразовать строку с числами, разделенные пробелами/запятыми или какой либо подстрокой в список строк с числами.
Это можно сделать следующими способами:
' '
или ';'
методом строки str.split()
,re.split()
,re.findall()
.Дальнейший алгоритм вычисления суммы чисел, находящихся в строке с разделителем будет аналогичен предыдущему примеру.
>>> 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
Есть такая эзотерическая концепция "Нумерология", согласно которой числа определяют нашу жизнь и существование всего, что нас окружает. Так вот, в ней есть понятие "числа души человека", которое считается сложением всех цифр в дате его рождения, пока не получится число, которое меньше 10. То есть число от 1 до 9.
Например, есть дата рождения 29.09.2019 г. Тогда число души считается следующим образом:
Изобразим подсчет числа "Души" на языке Python. Для краткости, воспользуемся понятием выражения генератора-списка:
def soul(num): # считаем до тех пор пока длина # строкового представления `num` больше 1 while len(str(num)) > 1: # функция sum() складывает список цифр # для краткости воспользуемся генератором списка num = sum( # генератор-списка [int(n) # преобразуем строку в цифру # проходимся по элементам списка строк for n in list(str(num)) # список строк из числа (даты) # проверяем строку на цифру if n.isdigit()] ) return num # дата date = '29.09.2019' s = soul(date) print(date, '=>', s) # 29.09.2019 => 5 # целое число num = 1357 s = soul(num) print(num, '=>', s) # 1357 => 7 # вещественное число pi = 3.1415926 s = soul(pi) # 3.1415926 => 4