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

如何更简洁地基于指定列表将一维列表拆分为嵌套列表?

基于指定列表拆分一维列表的优化解法

需求是根据list2中的元素长度,将list1拆分为对应长度的嵌套列表,示例如下:

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
list2 = [3, 4, 2, 6]
# 预期结果
solution = [[1, 2, 3], [4, 5, 6, 7], [8, 9], [10, 11, 12, 13, 14, 15]]

我目前的实现方式如下,但觉得不够简洁:

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
list2 = [3, 4, 2, 6]

j = 0
solution= []

for i in list2:
    solution.append(list1[j:i+j])
    j += i

希望能得到更简便高效的实现方案。


优化解法1:使用itertools.accumulate生成切片索引

利用itertools.accumulate快速生成每个子列表的起始和结束索引,结合列表推导式实现紧凑写法:

from itertools import accumulate

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
list2 = [3, 4, 2, 6]

indices = [0] + list(accumulate(list2))
solution = [list1[indices[k]:indices[k+1]] for k in range(len(list2))]

优化解法2:生成器函数封装

如果需要逻辑复用,可封装成生成器函数,兼顾可读性和灵活性:

def split_list_by_lengths(original, lengths):
    start = 0
    for length in lengths:
        end = start + length
        yield original[start:end]
        start = end

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
list2 = [3, 4, 2, 6]

solution = list(split_list_by_lengths(list1, list2))

优化解法3:简化原循环写法

原逻辑本身效率很高,可简化为更紧凑的形式,保持可读性的同时减少冗余:

list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
list2 = [3, 4, 2, 6]

solution, start = [], 0
for l in list2:
    solution.append(list1[start:start+l])
    start += l

以上几种方法均能满足需求:itertools.accumulate写法最简洁,生成器函数适合复用场景,简化后的原循环则兼顾效率和可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:33:22