You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何将时间列表拆分为与子块首元素间隔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秒)。原代码存在索引越界、结果遗漏子列表等问题,以下是优化后的解决方案。

原代码问题分析

  1. 未初始化firstchunk和result列表,运行时会触发NameError
  2. 括号位置错误:int(time_diff(start,list[i+1])<900)逻辑错误,应改为int(time_diff(start, list[i+1])) < 900,否则会先判断布尔值再转整数,完全偏离预期逻辑
  3. 循环结束后,最后一个firstchunk未添加到result中,导致结果遗漏
  4. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:21:02