Есть две проблемы:
sum()
начинается суммировании с целым числом 0
. Вы не можете добавить timedelta()
объект в целое число, так что вы получите ошибку:
>>> import datetime
>>> times = [datetime.timedelta(0, 1, 256273), datetime.timedelta(0, 0, 910417), datetime.timedelta(0, 0, 388175)]
>>> sum(times)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'
Даже если вы могли бы просто использовать sum()
сразу, вы не можете преобразовать timedelta()
объект в float()
, передав его функции float()
:
>>> float(datetime.timedelta())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float() argument must be a string or a number
Вы должны сказать sum()
начать с пустой timedelta
(начало в timedelta(0)
) и использовать timedelta.total_seconds()
функция, чтобы получить число с плавающей точкой:
>>> sum(times, datetime.timedelta())
datetime.timedelta(0, 2, 554865)
>>> sum(times, datetime.timedelta()).total_seconds()
2.554865
>>> sum(times, datetime.timedelta()).total_seconds()/len(times)
0.8516216666666666
Вы можете опустить .total_seconds()
часть и получить другой timedelta()
объект:
>>> sum(times, datetime.timedelta())/len(times)
datetime.timedelta(0, 0, 851621)
, который будет более точным. Вы всегда можете позвонить .total_seconds()
после разделения:
>>> (sum(times, datetime.timedelta())/len(times)).total_seconds()
0.851621
И какая ошибка? –
Дубликат для части A: http://stackoverflow.com/q/4049825/3001761 – jonrsharpe