You need to enable JavaScript to run this app. Python如何将给定数值列表按连续非降序段拆分为目标嵌套列表?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 05:36:01