Как сложить все заначения временных отрезков 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