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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:39:02