我创建了timedelta
个对象的列表,我需要获取该列表的平均值。当我尝试做
return (sum(delta_list)/(len(delta_list)-1))
我得到
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'
我是使用python的datetime
类的新手。我还想知道如何将这种平均数转换为天数:小时数:分钟数:我不需要比分钟数小的任何数字。
sum
想要一个起始值,默认情况下为0
,但是无法将0
添加到timedelta
中,因此会出现错误。
您只需要给sum
一个timedelta()
作为初始值:
# this is the average
return sum(delta_list, timedelta()) / len(delta_list)
要打印出来,您可以这样做:
print str(some_delta)
如果您要自定义某些内容,可以得到some_delta.days
和some_delta.seconds
,但必须计算之间的所有内容。
首先,sum
将列表中的所有元素添加到初始值,默认值为0
(值为零的整数)。因此,要在sum
的列表上使用timedelta
,您需要传递timedelta(0)
参数-sum(delta_list, timedelta(0))
。
第二,为什么要从列表的长度中减去一个?如果列表的长度为1,您将获得ZeroDivisionError
。
已解决上述问题,最后将timedelta
对象作为平均值。如何将其转换为人类可读的格式,我留给您作为练习。 datetime module documentation应该回答所有可能的问题。
sum()
function需要一个初始值,以将所有可迭代项添加到。它默认为sum()
,这就是为什么在将0
添加到timedelta
时出现错误的原因。
要解决此问题,只需将int
对象作为第二个参数传递给timedelta
:
(创建不带参数的sum
会创建一个对应于零时差的参数。]
此外,一组项目的平均值通常是项目总和除以项目数,因此您无需从timedelta
中减去1。
这些更改意味着我们可以从您的声明中删除一些括号。
所以这给你:
len(delta_list)
return sum(delta_list,timedelta()) / len(delta_list)
对象具有访问天,微秒和秒的属性。您可以轻松引用这些内容,例如:
datetime.timedelta
要获得分钟数,您必须将秒数除以60。