如何比较时间字符串列表相邻元素,为后序更小的时间加1天?
代码问题分析
- 问题1:未继承前序处理的日期偏移
每次循环都重新用原始字符串解析early变量,完全没有用到上一轮已经给后一个时间加过的1天偏移,比如第一轮处理后later是1900-01-02 11:00,第二轮解析time_str[1]得到的early还是1900-01-01 11:00,之前加的日期偏移直接丢失。 - 问题2:列表元素重复插入
每轮循环同时插入early和later两个元素,会导致所有中间时间点被重复插入两次,原列表5个元素最终得到8个结果,和预期的5个输出元素不符。
正确实现方案
思路:先处理第一个时间存入结果列表,后续每个时间先解析,再和结果列表的最后一个已处理时间比较,小于就加1天,再存入结果列表即可,全程复用已处理的偏移结果。
from datetime import datetime, timedelta time_str = ["23:00", "11:00", "1:00", "5:00", "7:00"] time_date_lst = [] # 先处理第一个元素 prev_time = datetime.strptime(time_str[0], "%H:%M") time_date_lst.append(prev_time) for t in time_str[1:]: curr_time = datetime.strptime(t, "%H:%M") # 和上一个已处理的时间比较 if curr_time < prev_time: curr_time += timedelta(days=1) time_date_lst.append(curr_time) # 更新上一个时间为当前处理后的时间,继承偏移 prev_time = curr_time print(time_date_lst)
运行输出符合预期:
[datetime.datetime(1900, 1, 1, 23, 0), datetime.datetime(1900, 1, 2, 11, 0), datetime.datetime(1900, 1, 3, 1, 0), datetime.datetime(1900, 1, 3, 5, 0), datetime.datetime(1900, 1, 3, 7, 0)]
内容的提问来源于stack exchange,提问作者armin
相关产品推荐
相关产品推荐

