Python计算字典内日期列表相邻间隔平均值代码错误排查
代码错误原因
- 循环索引逻辑错误:遍历用了
range(0, len(k)),当i=0时,k[i-1]实际取到的是列表最后一个元素,会额外计算「最后一个日期减第一个日期」的错误差值。 - 总间隔时长变量初始化位置错误:
y = timedelta(days=0)写在for循环内部,每次遍历都会重置总时长为0,最终y只会保留最后一次循环计算的间隔值,而非所有间隔的总和。 - 平均间隔的分母错误:长度为n的日期序列,相邻间隔的数量是
n-1,原代码直接除以n,会导致计算结果比实际值偏小。 - 字典更新位置错误:
dicts.update({j:score})写在内部循环里,每计算一次间隔就覆盖一次字典值,最终存储的是最后一次循环的计算结果,你测试的10008条目最终取到的就是最后一个间隔101天除以3的结果33天+16小时,和你遇到的错误输出完全吻合。
修正后的实现代码
from datetime import timedelta import datetime my_dict = { '001':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 13)], '10008':[datetime.date(2012,11,25), datetime.date(2013,3,30), datetime.date(2013,7,9)] } for key, date_list in my_dict.items(): # 日期数小于2无有效间隔,可根据需求调整默认值 if len(date_list) < 2: my_dict[key] = timedelta(0) continue total_delta = timedelta(0) # 遍历到倒数第二个元素即可,计算和下一个日期的间隔 for i in range(len(date_list)-1): delta = date_list[i+1] - date_list[i] total_delta += delta # 平均间隔=总间隔/间隔数量 avg_delta = total_delta / (len(date_list)-1) my_dict[key] = avg_delta
内容的提问来源于stack exchange,提问作者as9934
相关产品推荐
相关产品推荐

