求助:如何将时间列表拆分为与子块首元素间隔15分钟的子列表?
按时间间隔拆分时间列表的优化解决方案
问题背景
给定时间列表:
time_list = ["8:00:33","8:05:02","8:06:12","8:58:17","8:58:58","9:53:11","11:03:54","11:45:51","13:54:42"]
需求是将列表拆分为多个子列表,每个子列表内的所有元素与该子列表第一个元素的时间差不超过15分钟(900秒)。原代码存在索引越界、结果遗漏子列表等问题,以下是优化后的解决方案。
原代码问题分析
- 未初始化
firstchunk和result列表,运行时会触发NameError - 括号位置错误:
int(time_diff(start,list[i+1])<900)逻辑错误,应改为int(time_diff(start, list[i+1])) < 900,否则会先判断布尔值再转整数,完全偏离预期逻辑 - 循环结束后,最后一个
firstchunk未添加到result中,导致结果遗漏 - 使用
list作为变量名,覆盖了Python内置的list类型,属于不规范写法
优化后的完整代码
首先实现time_diff函数,将时间字符串转换为总秒数后计算差值:
def time_diff(time_str1, time_str2): # 将时间字符串转换为总秒数 def to_seconds(t): h, m, s = map(int, t.split(':')) return h * 3600 + m * 60 + s return abs(to_seconds(time_str1) - to_seconds(time_str2)) # 定义时间列表,避免使用内置list作为变量名 time_list = ["8:00:33","8:05:02","8:06:12","8:58:17","8:58:58","9:53:11","11:03:54","11:45:51","13:54:42"] result = [] if not time_list: print(result) exit() # 初始化当前子列表和起始时间 current_chunk = [time_list[0]] start_time = time_list[0] for time in time_list[1:]: if time_diff(start_time, time) <= 900: current_chunk.append(time) else: # 将当前子列表加入结果,新建子列表 result.append(current_chunk) current_chunk = [time] start_time = time # 循环结束后,添加最后一个子列表 result.append(current_chunk) # 输出结果 print(result)
运行结果
[ ["8:00:33", "8:05:02", "8:06:12"], ["8:58:17", "8:58:58"], ["9:53:11", "11:03:54"], ["11:45:51"], ["13:54:42"] ]
完全符合预期需求,同时解决了原代码的所有问题。
内容的提问来源于stack exchange,提问作者Nik395
相关产品推荐
相关产品推荐

