Python如何将给定数值列表按连续非降序段拆分为目标嵌套列表?
分组逻辑拆解
先对照给出的原始列表a和目标结果b的位置对应关系,可以明确切分规则:
- 每个完整分组都是从数值1起始,按顺序覆盖1、2、3、4的出现阶段,当分组内第一次出现数值4时,就代表走完一个完整的分组周期
- 唯一的切分触发条件:遍历到数值1时,如果当前正在累积的分组已经走完完整周期(即组内已经出现过4),就将之前攒好的分组存入最终结果,以当前这个1作为新分组的起始点
你原有代码的核心问题是完全缺失分组切分逻辑:仅通过判断元素≤4就把所有内容无脑塞入单个层级的列表,既没有维护临时的分组容器,也没有设置切分的触发判断,自然无法得到嵌套结构的目标结果。
调整后可直接运行的代码
a = [1,1,2,3,3,3,3,4,4,1,2,2,2,3,3,4,4,4,1,1,2,3,4,4,4] b = [] current_group = [] # 标记当前累积的分组是否已经走完1→2→3→4的完整流程 is_group_completed = False for num in a: if num == 1: # 遇到1时,若当前分组已完成,触发切分 if is_group_completed: b.append(current_group) current_group = [] is_group_completed = False current_group.append(num) elif num in (2, 3): # 2、3属于分组流程内的常规元素,直接加入当前组即可 current_group.append(num) elif num == 4: # 4是分组流程的终点,加入后标记分组已完成 current_group.append(num) is_group_completed = True # 遍历完成后,把最后剩余的分组补入结果 b.append(current_group)
运行上述代码得到的b与目标结果完全一致:
[[1,1,2,3,3,3,3,4,4], [1,2,2,2,3,3,4,4,4], [1,1,2,3,4,4,4]]
逻辑校验
逐段对照遍历过程可以确认切分点完全匹配目标:
- 从头开始累积第一组,直到遇到4时标记分组完成,后续第一个1触发第一次切分,存入前9个元素组成第一组
- 以切分点的1为起点累积第二组,再次遇到4标记完成后,下一个1触发第二次切分,存入后续9个元素组成第二组
- 以新的1为起点累积最后一组,遍历完所有元素后直接存入,与第三组目标完全一致
内容的提问来源于stack exchange,提问作者agus
相关产品推荐
相关产品推荐

