Python代码出现List Index Out Of Range错误,求排查修复及原因解析
修复「List Index Out Of Range」错误及原因分析
嘿,我看到你碰到了List Index Out Of Range的错误,咱们来一步步搞清楚问题出在哪,然后把它修好~
错误原因拆解
你的代码里有几个核心问题直接导致了索引越界:
- 空列表直接访问索引:初始化时
a、b、c都是空列表,但你在循环的第一行就尝试访问a[0]、b[0]、c[0]——空列表里没有任何元素,自然找不到索引为0的位置,这就是报错的根源。 - 逻辑顺序错误:你在每次循环添加元素之前就去取列表元素,而且每次循环都重复排序,既浪费性能,也不符合“先分类再处理”的逻辑。
- 转义字符错误:代码里的
>是HTML转义字符,Python无法识别,要改成普通的>才能正确做大小比较。
另外,原代码里取a[0]、b[0](排序后的第一个元素,也就是最小值)的逻辑,和后续的“两数之和与第三个数比较”的需求不匹配——看起来你是想判断三个数中最大的数和另外两个之和的关系,所以应该取每个分组的最大值才对。
修复后的代码
t = int(input()) j = list(map(int, input().split())) d = list(map(int, input().split())) a = [] b = [] c = [] # 先把所有元素按标签分到对应列表 for num, tag in zip(j, d): if tag == 1: a.append(num) elif tag == 2: b.append(num) elif tag == 3: c.append(num) # 先检查三个分组是否都有元素,避免后续索引错误 if not a or not b or not c: print("提示:某个分组没有元素,请检查输入数据") else: # 对每个分组排序,取最大值(升序排序后最后一个元素是最大值) a.sort() b.sort() c.sort() l, h, m = a[-1], b[-1], c[-1] # 找出三个数里的最大值,计算另外两个数的和 max_num = max(l, h, m) sum_rest = l + h + m - max_num # 执行判断逻辑 if sum_rest > max_num: print(max_num) else: print(sum_rest)
关键修复点说明
- 调整处理顺序:先完成所有元素的分类,再进行排序和判断,避免在列表为空时访问索引。
- 添加空列表检查:如果输入数据中某个标签(1/2/3)没有对应的元素,会提前给出提示,防止再次触发索引错误。
- 修正取值逻辑:用
a[-1]取排序后的最大值,符合你后续比较“两数之和与最大数”的需求。 - 修复比较符号:把
>改成Python能识别的>,确保比较逻辑正常运行。
内容的提问来源于stack exchange,提问作者Developing Right




