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

如何根据列表B的数值拆分列表A为对应长度的子列表

按指定长度列表拆分目标列表的Python实现

核心方案:基于切片与索引追踪

直接通过追踪起始索引,遍历指定长度列表进行切片操作是最直观的实现方式:

A = [15,2,3,42,5,6,7,82,94,12,1,21,2,3,4,5,5,3,2,2,22,3,4,5,6,6,5,...]  # len(A) = 65
B = [15, 20, 4, 11, 12, 3]

split_result = []
current_start = 0
for chunk_len in B:
    current_end = current_start + chunk_len
    split_result.append(A[current_start:current_end])
    current_start = current_end

# 验证拆分后的子列表长度是否符合要求
print([len(chunk) for chunk in split_result])  # 输出: [15, 20, 4, 11, 12, 3]

逻辑说明:

  • 用current_start记录每次切片的起始位置,初始为0
  • 遍历列表B中的每个长度值,计算切片结束位置current_end = current_start + chunk_len
  • 截取A中[current_start:current_end]的子列表加入结果,然后更新起始位置为当前结束位置
  • 由于题目已保证B的元素和等于A的长度,无需处理索引越界问题

进阶方案:使用itertools.accumulate简化索引计算

借助Python标准库的itertools.accumulate可以自动生成累加索引,用列表推导式一步完成拆分:

from itertools import accumulate

A = [15,2,3,42,5,6,7,82,94,12,1,21,2,3,4,5,5,3,2,2,22,3,4,5,6,6,5,...]
B = [15, 20, 4, 11, 12, 3]

# 生成包含起始位置的累加索引:[0, 15, 35, 39, 50, 62, 65]
split_indices = [0] + list(accumulate(B))
# 遍历索引对,截取对应切片
split_result = [A[split_indices[i]:split_indices[i+1]] for i in range(len(split_indices)-1)]

逻辑说明:

  • accumulate(B)会生成B的累加序列:15, 35, 39, 50, 62, 65
  • 加上初始位置0后,得到完整的切片索引边界
  • 通过列表推导式遍历相邻索引对,快速生成所有子列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:15:32