创建二维动态数组地图时出现对象赋值索引越界错误
解决二维动态数组地图创建时的
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
相关产品推荐
相关产品推荐

