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

如何将数组/列表划分为长度逐次递增1的子列表?

数组拆分:逐次递增长度的子数组实现方案

最适合的工具选择

  • 程序语言:Python,语法简洁,原生支持列表切片和动态数组操作,能快速实现需求。
  • 数据结构:Python列表(list),作为动态数组,既可以存储原始元素,也能直接嵌套存储拆分后的子数组,无需额外复杂的数据结构。

实现思路与代码

核心逻辑是通过起始索引和递增的子数组长度,逐步从原数组中截取对应长度的子片段,直到剩余元素不足以组成下一个长度的子数组为止:

def split_increasing_subarrays(arr):
    result = []
    start_idx = 0
    current_length = 1
    arr_len = len(arr)
    
    while start_idx + current_length <= arr_len:
        # 截取当前长度的子数组
        sub_arr = arr[start_idx:start_idx + current_length]
        result.append(sub_arr)
        # 更新起始位置和下一个子数组的长度
        start_idx += current_length
        current_length += 1
    
    # 可选:如果需要把剩余不足长度的元素也加入结果,取消下面注释
    # if start_idx < arr_len:
    #     result.append(arr[start_idx:])
    
    return result

# 测试示例
x = [23,25,3,45,67,89,67,45,4,6]
print(split_increasing_subarrays(x))
# 输出:[[23], [25, 3], [45, 67, 89], [67, 45, 4, 6]]

代码说明

  • 用start_idx记录每次截取子数组的起始位置,current_length控制当前子数组的长度,每次循环后两者分别累加current_length和1
  • Python列表的切片操作arr[a:b]会返回从索引a到b-1的元素,刚好匹配我们需要的长度为current_length的子数组
  • 循环条件start_idx + current_length <= arr_len确保不会越界,只截取完整长度的子数组(如果需要处理剩余元素,可取消注释部分的代码)
  • 整体时间复杂度为O(L),L是原数组的长度,每个元素仅被访问一次,效率很高

内容的提问来源于stack exchange,提问作者user23170646

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:01:21