Как сложить все заначения временных отрезков datetime.timedelta в списоке?

Есть список:

p = [datetime.timedelta(seconds=856), datetime.timedelta(seconds=5937), 
     datetime.timedelta(seconds=3447), datetime.timedelta(seconds=3061), 
     datetime.timedelta(seconds=1201), datetime.timedelta(seconds=158), 
     datetime.timedelta(seconds=2233), datetime.timedelta(seconds=1505), 
     datetime.timedelta(seconds=3351), datetime.timedelta(seconds=2762), 
     datetime.timedelta(seconds=1813), datetime.timedelta(seconds=83)]

При переборе списка данные:

0:14:16 
1:38:57
0:57:27
0:51:01
0:20:01
0:02:38
0:37:13
0:25:05
0:55:51
0:46:02
0:30:13
0:01:23

Как осуществить сложение всех временных отрезков?

То есть, чтобы на выходе операции получить 7:20.


Ответы (2 шт):

Автор решения: 5c0rp

Можно воспользоваться функцией reduce и модулем operator. reduce по очереди будет брать значения из вашего массива и плюсовать следующий элемент с сумме предыдущих.

from functools import reduce
import operator
q = reduce(operator.add, p)
print(q)
→ Ссылка
Автор решения: MaxU

По ссылке из комментария @5c0rp можно найти такое решение:

res = sum(p, datetime.timedelta())
print(res)
>>>7:20:07

Docstring функции sum():

In [16]: sum?
Signature: sum(iterable, start=0, /)
Docstring:
Return the sum of a 'start' value (default: 0) plus an iterable of numbers

When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
Type:      builtin_function_or_method

Обратите внимание на параметр start=0, принимающий по умолчанию значение 0. Именно это вызывает ошибку (0 - числовой литерал типа int):

In [17]: sum(p)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-654d70e1fa84> in <module>
----> 1 sum(p)

TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'

Поэтому, чтобы избежать данной ошибки, в качестве start нужно указать коструктор класса datetime.timedelta

→ Ссылка