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

合并连续同标签元组列表元素时缺失最后子列表的问题排查

问题:合并连续相同标签的时间戳列表

输入与需求

输入的子列表(可视为元组)如下:

[['PS', 0], ['PS', 71.43], ['PS', 142.86],  ['tut', 37071.43],  ['tut', 59000.0], ['PS', 59071.43], ['PS', 61500.0]]

每个子元素包含分段标签和时间戳。需求是将连续拥有相同标签的时间戳归入同一个子列表,并在子列表末尾添加格式为[该组最后一个时间戳, 标签]的元素。

预期输出(注:原预期输出中[37000.0, "PS"]应为笔误,正确应为[142.86, "PS"]):

[[0.0, 71.43, 142.86, [142.86, "PS"]], [37071.43, 59000.0, [59000.0, "tut"]], [59071.43, 61500.0, [61500.0, "PS"]]]

现有问题

当前实现代码输出缺失了最后一组的时间戳59071.43,实际输出:

[['PS', 0], ['PS', 71.43], ['PS', 142.86],  ['tut', 37071.43],  ['tut', 59000.0], ['PS', 61500.0]]

原实现代码:

def same_sec(tuple_list):
    one_tuple = [] #sublist
    sec_list= [] #list of sublists
    print(len(tuple_list))
    for i in range(len(tuple_list)):
        #assuming last element always belongs to the last group of section ids
        if i == len(tuple_list) - 1: #add the last element
            sec_list[-1].append([tuple_list[i][0],tuple_list[i][1]])
         #if two consecutive labels are the same add it to sublist   
        elif (tuple_list[i][0] == tuple_list[i+1][0]): 
            one_tuple.append(tuple_list[i][1])
        #if next label is different add current element to sublist and add sublist to list
        else: 
            one_tuple.append([tuple_list[i][0],tuple_list[i][1]])
            sec_list.append(one_tuple)
            one_tuple = []  #reset sublist  
    return sec_list

问题分析

  1. 最后元素处理逻辑错误:直接往sec_list[-1]追加,但如果最后一组还未被加入sec_list,会引发索引错误,且未将当前分组的时间戳完整加入。
  2. 分组逻辑混乱:连续标签相同时仅追加当前时间戳,但未处理分组收尾;不同标签时追加的格式不符合需求。
  3. 遗漏最后分组:循环结束后未主动处理最后一个分组,导致部分元素丢失。

修正后的代码

def same_sec(tuple_list):
    # 处理空列表的边界情况
    if not tuple_list:
        return []
    
    sec_list = []
    # 初始化当前分组的标签和时间戳列表
    current_label = tuple_list[0][0]
    current_timestamps = [tuple_list[0][1]]
    
    # 从第二个元素开始遍历
    for label, timestamp in tuple_list[1:]:
        if label == current_label:
            # 相同标签,追加时间戳
            current_timestamps.append(timestamp)
        else:
            # 不同标签,收尾当前分组并加入结果
            current_timestamps.append([current_timestamps[-1], current_label])
            sec_list.append(current_timestamps)
            # 初始化新分组
            current_label = label
            current_timestamps = [timestamp]
    
    # 处理最后一个未收尾的分组
    current_timestamps.append([current_timestamps[-1], current_label])
    sec_list.append(current_timestamps)
    
    return sec_list

测试验证

输入测试代码:

input_list = [['PS', 0], ['PS', 71.43], ['PS', 142.86],  ['tut', 37071.43],  ['tut', 59000.0], ['PS', 59071.43], ['PS', 61500.0]]
print(same_sec(input_list))

输出结果:

[[0, 71.43, 142.86, [142.86, 'PS']], [37071.43, 59000.0, [59000.0, 'tut']], [59071.43, 61500.0, [61500.0, 'PS']]]

内容的提问来源于stack exchange,提问作者Béla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:18:35