需要timedelta对象列表中的平均值

时间:2011-02-15 16:17:51

标签: python datetime timedelta

我创建了一个timedelta对象列表,我需要获得此列表的平均值。当我尝试做的时候

return (sum(delta_list)/(len(delta_list)-1))

我得到TypeError:不支持的操作数类型+:'int'和'datetime.timedelta'

我是使用pythons datetime类的新手。我也想知道如何将这个平均值变成像天的格式:小时:分钟:我不需要任何小于分钟的东西。

4 个答案:

答案 0 :(得分:27)

sum需要一个起始值,默认情况下为0,但0无法添加到timedelta,因此您会收到错误消息。

您只需要sum timedelta()作为起始值:

# this is the average
return sum(delta_list, timedelta()) / len(delta_list)

要打印出来,你可以这样做:

print str(some_delta)

如果您想要自定义内容,可以获得some_delta.dayssome_delta.seconds,但您必须计算其中的所有内容。

答案 1 :(得分:3)

sum() function需要一个起始值来添加iterable中的所有项目。它默认为0,这就是为什么您收到有关向timedelta添加int的错误。

要解决此问题,只需将timedelta对象作为第二个参数传递给sum

(创建一个没有参数的timedelta会创建一个与零时差相对应的颜色。)

此外,一组项目的平均值通常是项目总和除以项目数量,因此您无需从len(delta_list)中减去1。

这些更改意味着我们可以从您的陈述中删除一些括号。

所以这会给你:

return sum(delta_list,timedelta()) / len(delta_list)

答案 2 :(得分:3)

首先,sum将列表中的所有元素添加到初始值,默认为0(值为零的整数)。因此,为了能够在sum列表中使用timedelta,您需要传递timedelta(0)参数 - sum(delta_list, timedelta(0))

其次,为什么要从列表长度中减去一个?如果列表长度为1,您将获得ZeroDivisionError

修正了上述内容后,您最终会得到timedelta个平均值的对象。如何将其转换为人类可读的格式我将作为练习留给您。 datetime module documentation应该回答所有可能的问题。

答案 3 :(得分:2)

datetime.timedelta对象具有访问日,微秒和秒的属性。您可以轻松地引用它们,例如:

>>> import datetime
>>> daybefore = datetime.timedelta(days=1)
>>> dayminus2 = datetime.timedelta(days=2, minutes=60)
>>> daybefore.days
1
>>> dayminus2.days, dayminus2.seconds
(2, 3600)

要获得分钟,你必须将秒数除以60。