Looking for fastest solution of time averaging problem.
I\'ve got a list of datetime objects. Need to find average value of time (excluding year, month, day). Here i
You would at least use sum() with a generator expression to create the total number of seconds:
from datetime import datetime, date, time
def avg_time(datetimes):
total = sum(dt.hour * 3600 + dt.minute * 60 + dt.second for dt in datetimes)
avg = total / len(datetimes)
minutes, seconds = divmod(int(avg), 60)
hours, minutes = divmod(minutes, 60)
return datetime.combine(date(1900, 1, 1), time(hours, minutes, seconds))
Demo:
>>> from datetime import datetime, date, time, timedelta
>>> def avg_time(datetimes):
... total = sum(dt.hour * 3600 + dt.minute * 60 + dt.second for dt in datetimes)
... avg = total / len(datetimes)
... minutes, seconds = divmod(int(avg), 60)
... hours, minutes = divmod(minutes, 60)
... return datetime.combine(date(1900, 1, 1), time(hours, minutes, seconds))
...
>>> avg_time([datetime.now(), datetime.now() - timedelta(hours=12)])
datetime.datetime(1900, 1, 1, 7, 13)