如何将一维列表拆分为元素长度递减至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为正整数)。
实现思路
- 确定初始子列表长度
n:原列表长度是n + (n-1) + ... + 1的和(三角数),解方程n(n+1)/2 = len(lst)得到n。比如原列表长度为10时,n=4(因为4×5÷2=10)。 - 从
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
相关产品推荐
相关产品推荐

