我已经创建了一个timedelta
对象列表,我需要得到这个列表的平均值。当我尝试做
return (sum(delta_list)/(len(delta_list)-1))
我明白了
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'
我是使用 pythondatetime
类的新手。我也想知道如何将这个平均值转换为天:小时:分钟:我不需要任何小于分钟的格式。
sum
想要一个起始值,0
默认情况下,但0
不能添加到 atimedelta
所以你得到错误。
您只需提供sum
atimedelta()
作为起始值:
# this is the average
return sum(delta_list, timedelta()) / len(delta_list)
要打印出来,你可以这样做:
print str(some_delta)
如果您想要定制的东西,您可以获得some_delta.days
,some_delta.seconds
但您必须计算两者之间的所有内容。
首先,sum
将列表中的所有元素添加到初始值,默认情况下为初始值0
(值为 0 的整数)。因此,为了能够在 'ssum
列表上使用timedelta
,您需要传递一个timedelta(0)
参数 - sum(delta_list, timedelta(0))
。
其次,为什么要从列表的长度中减去一个?如果列表的长度为 1,您将得到一个ZeroDivisionError
.
修复上述问题后,您最终会timedelta
得到一个平均值的对象。如何将其转换为人类可读的格式,我留给你作为练习。datetime 模块文档应该回答所有可能的问题。
该sum()
函数需要一个起始值来添加可迭代对象中的所有项目。默认情况下,0
这就是您收到有关将 a 添加timedelta
到int
.
要解决此问题,只需将timedelta
对象作为第二个参数传递给sum
:
(创建timedelta
不带参数的 a 会创建一个对应于零时差的。)
此外,一组项目的平均值通常是项目的总和除以项目的数量,因此您不需要从 中减去 1 len(delta_list)
。
这些更改意味着我们可以从您的声明中删除一些括号。
所以这给了你:
return sum(delta_list,timedelta()) / len(delta_list)
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。