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

创建二维动态数组地图时出现对象赋值索引越界错误

解决二维动态数组地图创建时的IndexError问题

嘿,我一眼就看出你这问题出在哪了——你初始化的mapa只是个包含两个空列表的二维容器,但赋值的时候直接去访问超出当前列表长度的索引,这不报错才怪呢!咱们来一步步把它搞定。

问题根源

你定义的mapa = [[],[]]只有2个空的子列表,当你的循环变量x超过1(比如x=2),或者y大于等于0但当前子列表是空的时,自然就触发了IndexError: list assignment index out of range——因为列表根本没有那么多位置让你赋值!

方案一:提前按尺寸初始化二维数组

既然你有xsize和ysize(像素尺寸),最稳妥的方式是在创建地图前,先根据这两个值初始化好对应大小的二维列表:

class Map():
    def __init__(self):
        self.latitude = 0
        self.longitude = 0
        self.xsize = 10  # 替换成你的实际像素宽度
        self.ysize = 10  # 替换成你的实际像素高度
        # 用列表推导式初始化xsize行、每行ysize个元素的二维列表
        self.mapa = [[None for _ in range(self.ysize)] for _ in range(self.xsize)]
    
    def _create_map(self):
        for x in range(self.xsize):
            for y in range(self.ysize):
                self.mapa[x][y] = Point()  # 现在赋值完全不会越界

这种方式提前给每个位置预留了空间,后续直接覆盖赋值就行,逻辑简单又高效。

方案二:动态扩展行和列(适配动态尺寸场景)

如果你的xsize和ysize是运行时才确定的,或者需要动态扩展地图尺寸,可以在赋值前检查并添加行/列:

class Map():
    def __init__(self):
        self.latitude = 0
        self.longitude = 0
        self.xsize = 0
        self.ysize = 0
        self.mapa = []
    
    def _create_map(self):
        # 假设这里先确定好xsize和ysize的实际值
        self.xsize = 15
        self.ysize = 15
        
        for x in range(self.xsize):
            # 如果当前x超出了mapa的现有行数,新增一行
            if x >= len(self.mapa):
                self.mapa.append([])
            for y in range(self.ysize):
                # 如果当前y超出了该行的现有列数,直接添加Point对象
                if y >= len(self.mapa[x]):
                    self.mapa[x].append(Point())
                else:
                    self.mapa[x][y] = Point()

这种方式灵活性更高,适合地图尺寸需要动态调整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:16