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

如何按指定索引列表将一个列表拆分为多个子列表?

嘿,这个需求其实很好实现,而且确实有简洁的写法!先理清楚逻辑:你的索引列表其实是拆分的结束位置(左闭右开的切片终点),比如示例里的[3,5],就是把原列表分成[0:3]、[3:5]、[5:]这三段,刚好匹配你要的输出。

一行代码解决方案

如果你追求简洁,用列表推导式就能搞定:

original = [1, 2, 3, 4, 5, 6, 7, 8]
indices = [3, 5]

result = [original[s:e] for s, e in zip([0] + indices, indices + [len(original)])]

运行后result就是[[1, 2, 3], [4, 5], [6, 7, 8]]。

原理很简单:

  • 我们把起始点0加到索引列表开头,把原列表长度加到索引列表结尾,得到两组拆分点:[0,3,5]和[3,5,8]
  • 用zip把这两组点一一配对,得到(0,3)、(3,5)、(5,8)
  • 对每一对取原列表的切片,就得到拆分后的子列表

更易读的循环版本

如果觉得一行代码可读性稍差,用循环写也很清晰:

original = [1, 2, 3, 4, 5, 6, 7, 8]
indices = [3, 5]

split_points = [0] + indices + [len(original)]
result = []
for start, end in zip(split_points[:-1], split_points[1:]):
    result.append(original[start:end])

这个逻辑和一行代码完全一致,只是拆分步骤更明确。

额外注意点

  • 如果索引列表是空的,这个方法会直接返回[original],符合预期
  • 如果索引里有超过原列表长度的数值,切片会自动截断到列表末尾,比如indices=[10]会得到[[1,2,3,4,5,6,7,8], []],要是想避免空列表,可以先过滤掉无效索引:
    valid_indices = [i for i in indices if 0 <= i <= len(original)]
    result = [original[s:e] for s, e in zip([0] + valid_indices, valid_indices + [len(original)])]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:16