Average timedelta in list

shinn picture shinn · Sep 1, 2010 · Viewed 14.8k times · Source

I want to calculate the avarage timedelta between dates in a list. Although the following works well, I'm wondering if there's a smarter way?

delta = lambda last, next: (next - last).seconds + (next - last).days * 86400   
total = sum(delta(items[i-1], items[i]) for i in range(1, len(items)))
average = total / (len(items) - 1)

Answer

Jochen Ritzel picture Jochen Ritzel · Sep 1, 2010

Btw, if you have a list of timedeltas or datetimes, why do you even do any math yourself?

datetimes = [ ... ]

# subtracting datetimes gives timedeltas
timedeltas = [datetimes[i-1]-datetimes[i] for i in range(1, len(datetimes))]

# giving datetime.timedelta(0) as the start value makes sum work on tds 
average_timedelta = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)