Python运行报IndexError列表索引越界(第36行)如何修复?
问题排查与修复
报错根本原因
- 循环变量
f未在外层循环中重置:list2总共只有a个元素,索引范围为0 ~ a-1。你的内层循环每次执行a-1次,每执行一次f自增1,第一次外层循环跑完后f的值就已经达到a-1,第二次外层循环进入后f继续自增就会超出list2的索引范围,触发越界错误。 - 内外层循环变量重名:两层循环都用
i作为变量名,会导致逻辑混乱。 - list3读取逻辑存在边界错误,可能导致
list3元素数量不足,后续读取list3[e]也会触发越界。 - 变量名使用了Python内置类型
list,存在潜在冲突。
修复后代码
import math # 替换内置类型名list,避免潜在冲突 with open("input.txt", "r") as file: lines = [] for line in file: lines.append(line.strip()) list1 = lines[0].split(" ") a = int(list1[0]) b = int(list1[1]) list2 = [] list3 = [] # 读取a个坐标点存入list2 for i in range(1, a+1): list2.append(lines[i]) # 读取b个坐标点存入list3,修正读取边界 for i in range(a+1, a+b+1): list3.append(lines[i]) max_val = 1000000000000000 list6 = [] for e in range(0, b): # 每次外层循环重置遍历指针和最小距离 f = 0 current_min = max_val # 把list3的点拆分逻辑移到内层循环外,避免重复操作 point_b = list3[e].split(" ") x = int(point_b[0]) y = int(point_b[1]) # 遍历所有list2的点计算距离 for f in range(0, a): point_a = list2[f].split(" ") x1 = int(point_a[0]) y1 = int(point_a[1]) distance = math.sqrt((x1 - x)**2 + (y1 - y)**2) if distance < current_min: current_min = distance list6.append(current_min) print(list6)
优化说明
- 移除了无意义的列表clear操作,减少冗余代码
- 替换重名的循环变量,避免逻辑冲突
- 调整了重复计算的代码位置,运行效率更高
内容的提问来源于stack exchange,提问作者xlePyrex
相关产品推荐
相关产品推荐

