我试图计算(排序的、不同的)日期之间的平均时间。这些日期存储在列表中,列表作为值保存在字典中(键是唯一标识符),如下所示:
my_dict = {'001':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 13)], '002':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 13)]...}
以下是我为此编写的代码:
for j,k in dicts.items():
for i in range(0,len(k)):
y = timedelta(days=0)
x = k[i] - k[i-1]
y = y + x
n = len(k)
score = y/n
dicts.update({j:score})
然而,当我将得到的值与数据进行比较时,它们似乎不正确,但我不确定为什么会这样。有人能告诉我我做错了什么吗
编辑:不正确的意思是平均值不正确。例如,10008吐出“10008”:datetime.timedelta(天=33,秒=57600)。但这一日期分别为2012年11月25日、2013年3月30日和2013年7月9日,相隔33天以上
首先,时间上的平均差距等于第一个和最后一个差距除以差距数量。因此,如果你不需要其他任何东西,只需使用第一个和最后一个分开的区间数。例如,如果你有7/10、7/20和7/30,你的平均间隔是10天。如果你将7/20改为7/12,你平均还有10天的时间
除此之外,如果您在工作时需要其他数据,以下是正确的循环:
我想你可以通过改变这一行来解决这个问题:
for i in range(0,len(k)):
关于这一行:
for i in range(1,len(k)):
这是因为在第一次遍历第二个嵌套for循环中的代码时,此行
x = k[i] - k[i-1]
将产生x = k[0] - k[-1]
,这将计算列表中第一项和最后一项之间的差异。而我认为你想做的是计算列表中第一项和第二项之间的差异但是如果您按照建议更改代码,那么第一行将计算为
x = k[1] - k[0]
,我认为这就是您想要的我看到了一个潜在的问题。从i=0开始,当有
x = k[i]- k[i-1]
时,从第一个元素减去最后一个元素。这将导致负值。您可以使用abs()函数来修复此问题您可以改为使用while循环:
相关问题 更多 >
编程相关推荐