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
相关产品推荐
相关产品推荐

