如何对动态更新的datetime.timedelta列表求和?
解决动态timedelta列表的求和问题
嗨,这个问题我之前也碰到过!其实sum()函数完全可以用来计算动态长度的timedelta列表总和,只是你漏掉了一个关键参数——初始值。
为什么直接用sum(liste1)不行?
Python的sum()函数默认初始值是0(整数类型),而整数和datetime.timedelta类型无法直接相加,这就会导致报错或者不符合预期的结果。你之前尝试切片后用sum得到错误结果,本质也是因为没指定正确的初始值。
正确的解法
只需要给sum()传入start=datetime.timedelta(0)作为初始累加值,这样所有参与计算的元素都是timedelta类型,就能顺利求和了:
import datetime # 动态生成的timedelta列表,长度不确定 liste1 = [ datetime.timedelta(0, 10800), datetime.timedelta(31), datetime.timedelta(0, 10800), # 可以随时新增元素 datetime.timedelta(2, 7200) ] # 正确求和方式 total_duration = sum(liste1, start=datetime.timedelta(0)) print(total_duration) # 输出:33 days, 8:00:00
另一种备选方案(循环累加)
如果你觉得sum的参数容易忘,也可以用循环手动累加,逻辑更直观:
import datetime liste1 = [datetime.timedelta(0, 10800), datetime.timedelta(31), datetime.timedelta(0, 10800)] total = datetime.timedelta(0) for delta in liste1: total += delta print(total) # 输出:31 days, 6:00:00
两种方法都能完美处理动态长度的timedelta列表求和问题,推荐用sum()的方式,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Heliomaster
相关产品推荐
相关产品推荐

