сумата на обекта datetime.datetime даде грешка TypeError: неподдържан тип(ове) на операнд за +: 'datetime.datetime' и 'datetime.datetime'

Опитвам се да обобщя списък с обект datetime.datetime, използвайки:

from datetime import datetime, timedelta
d= [datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18), datetime.datetime(2013, 4, 3, 16, 6, 59)]

sum_d = sum(d, timedelta())

Получавам грешката:

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

някаква идея какво правя грешно или как мога да обобщя този списък?

Искам да получа средната стойност от този списък, за който си мислех:

 d_avg = sum(d, timedelta()) / len(d)

Благодаря!


person mongotop    schedule 29.09.2013    source източник


Отговори (2)


Това е просто защото не можете да добавяте времена. Можете да добавяте времеви делта, но не и самите времена.

Искам да кажа, какво е 3th август 1995 + 19th юни 454? Няма смисъл. Можете да добавите разстоянието от година 0, но това е различно от добавянето на самите дати.

Какво се надявате да получите от това изчисление?


Ако се надявате да намерите средната стойност (защо?), ще трябва да използвате по-малко директен маршрут

import datetime

d = [datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18), datetime.datetime(2013, 4, 3, 16, 6, 59)]

d[0] + sum((d_i-d[0] for d_i in d), datetime.timedelta(0)) / len(d)
#>>> datetime.datetime(2013, 5, 5, 22, 20, 13, 666667)

Това намира сумата на отместванията от d[0], означава тези и след това добавя обратно това отместване.

person Veedrac    schedule 29.09.2013
comment
Средната стойност на тези дати ще бъде чудесно да се получи като timedelta обект. - person mongotop; 29.09.2013

Не можете да сумирате този списък: както се казва в съобщението за грешка, datetime.datetime обекти не могат да бъдат добавени. Какво, за Бога, например, бихте ли очаквали datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18) да се върне? Python обикновено няма да прави неща, които нямат никакъв смисъл ;-)

person Tim Peters    schedule 29.09.2013