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

Python中根据数值数组将列表分割为指定长度子集的实现问询

实现方案

方法1:指针遍历法(无额外依赖,易理解)

维护一个标记当前切割起始位置的指针,遍历切割长度数组t,每次截取s中从起始位置开始、长度为当前t元素的子列表,之后更新指针位置即可。

s = ['Y', 'U', 'U', 'N', 'U', 'U', 'N', 'N', 'N']
t = [2, 4, 3]

st = []
start = 0
for length in t:
    st.append(s[start:start+length])
    start += length

print(st)
# 输出:[['Y', 'U'], ['U', 'N', 'U', 'U'], ['N', 'N', 'N']]

替换t为[5, 2, 2]运行后,输出为[['Y', 'U', 'U', 'N', 'U'], ['U', 'N'], ['N', 'N']],完全符合预期。

方法2:迭代器推导式(写法更简洁)

借助迭代器取值后自动后移的特性,配合itertools.islice可以不用手动维护指针,实现更简洁的写法:

from itertools import islice

s = ['Y', 'U', 'U', 'N', 'U', 'U', 'N', 'N', 'N']
t = [5, 2, 2]
iter_s = iter(s)
st = [list(islice(iter_s, n)) for n in t]

print(st)
# 输出:[['Y', 'U', 'U', 'N', 'U'], ['U', 'N'], ['N', 'N']]

两种方法均默认支持sum(t) <= len(s)的场景,若sum(t)大于s的总长度,末尾的子列表会自动截取到s结束为止,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:03