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

如何将一维列表拆分为元素长度递减至1的二维列表

将一维列表拆分为长度递减的二维列表

需求明确:把一维列表[1,2,3,4,5,6,7,8,9,10]转换为子列表长度依次递减(最终为1)的二维列表,得到[[1,2,3,4],[5,6,7],[8,9],[10]]。仅处理长度符合要求的列表(即长度为三角数,满足n(n+1)/2,n为正整数)。

实现思路

  1. 确定初始子列表长度n:原列表长度是n + (n-1) + ... + 1的和(三角数),解方程n(n+1)/2 = len(lst)得到n。比如原列表长度为10时,n=4(因为4×5÷2=10)。
  2. 从n开始,按每次减1的长度依次截取原列表片段,收集到结果列表中即可。

Python 代码实现

lst = [1,2,3,4,5,6,7,8,9,10]
total_length = len(lst)

# 计算初始子列表长度n
n = int((2 * total_length) ** 0.5)
# 题目保证列表符合要求,验证步骤可省略
assert n * (n + 1) // 2 == total_length

result = []
start_idx = 0
for length in range(n, 0, -1):
    result.append(lst[start_idx:start_idx + length])
    start_idx += length

print(result)
# 输出: [[1,2,3,4],[5,6,7],[8,9],[10]]

代码说明

  • 通过三角数公式逆运算计算n:n近似等于√(2×总长度),因题目保证列表长度合规,直接取整即可。
  • 循环遍历从n到1的子列表长度,每次截取原列表对应区间的切片,添加到结果后更新起始索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:21