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

Python中嵌套列表切片遇重复元素结果异常的解决问询

解决Python嵌套列表切片因重复元素导致的索引错误

你的问题出在list.index()方法的特性上:它只会返回第一个匹配目标值的索引,当列表里有重复元素时,就会拿到错误的位置,导致切片逻辑失效。

问题分析

  • 对于arr[0],slc[0]是[0,5]:arr[0].index(5)返回第一个5的索引0,但你需要的是最后一个5的索引7,于是切片arr[0][4:0+1]变成空列表。
  • 对于arr[1],slc[1]是[5,13]:arr[1].index(13)返回第一个13的索引0,切片arr[1][4:0+1]同样为空。

解决方案

我们需要调整索引的获取逻辑:起始值取第一次出现的索引,结束值取最后一次出现的索引。可以通过反转列表来找到最后一次出现的位置:

arr = [[5, 9, 8, 1, 0, 10, 11, 5], [13, 4, 13, 2, 5, 6, 13], [8, 25, 13, 9, 8, 7]]
slc = [[0, 5], [5, 13], [13, 7]]
rslt = []

for sub_arr, (start_val, end_val) in zip(arr, slc):
    # 获取起始值的第一个索引
    start_idx = sub_arr.index(start_val)
    # 获取结束值的最后一个索引:反转列表找第一个匹配,再计算原索引
    reversed_idx = sub_arr[::-1].index(end_val)
    end_idx = len(sub_arr) - 1 - reversed_idx
    # 执行切片并添加到结果
    rslt.append(sub_arr[start_idx:end_idx + 1])

print(rslt)

运行结果

[[0, 10, 11, 5], [5, 6, 13], [13, 9, 8, 7]]

额外说明

如果需要处理目标值不存在的情况,可以添加判断逻辑,比如:

if start_val not in sub_arr or end_val not in sub_arr:
    # 处理不存在的情况,比如添加空列表或抛出提示
    rslt.append([])
    continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:28:15