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

Python开发游戏时列表索引触发IndexError错误是什么原因?

报错原因

你触发越界错误的核心原因有两个:

  1. 二维数组浅拷贝导致原数组被意外修改
    Python中列表的copy()方法是浅拷贝,你的grid是二维列表,referenceGrid = grid.copy()执行后,referenceGrid里的每一行子列表还是和原grid的子列表共享内存。你在函数里执行referenceGrid[y][x] = 69420的时候,原grid里对应的元素也会被同步修改。
  2. 重复调用查询函数导致第二次查询无结果
    你最后一行代码连续两次调用findCoordsFromGrid(2):第一次调用时已经把原grid里的2改成了69420,第二次调用时grid里已经没有值为2的元素,函数返回空列表,你直接取[0]自然触发索引越界。

修复方案

按需选择以下任意一种修改方案即可解决问题:

  • 方案1:只调用一次查询函数,缓存结果,避免重复查询
# 只查询一次保存结果,避免重复调用触发问题
head_coords = findCoordsFromGrid(2)[0]
head_pixelValues = [gridDict[head_coords[0]], gridDict[head_coords[1]]]
  • 方案2:把浅拷贝改成深拷贝,避免修改原数组
    首先导入深拷贝方法:
import copy

然后把函数里的referenceGrid = grid.copy()替换为:

referenceGrid = copy.deepcopy(grid)

额外优化建议

你当前查找坐标的写法效率较低,且index()只会返回同一行第一个匹配项的索引,如果你同一行有多个相同值的元素会漏查,推荐直接改成遍历索引+值的写法,不需要额外生成拷贝数组也能正常工作:

def findCoordsFromGrid(gridValue):
    global grid
    coordsLst = []
    for y, row in enumerate(grid):
        for x, val in enumerate(row):
            if val == gridValue:
                coordsLst.append([x, y])
    return coordsLst

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:30:01