сумма объекта 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)


Это просто потому, что вы не можете добавить время. Вы можете добавлять дельты по времени, но не само время.

Я имею в виду, что такое 3rd августа 1995 года + 19го июня 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