【问题标题】:Creating a map with object assignment out of range创建对象分配超出范围的地图
【发布时间】:2018-09-06 20:28:45
【问题描述】:

我尝试创建一个 2D 动态数组地图,并为地图的每个位置分配一个名为 Point 的对象。当我尝试使用 _create_map() 创建地图时,我得到:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "map.py", line 97, in _create_map
    self.mapa[x][y] = Point()
IndexError: list assignment index out of range

我尝试了不同的解决方案,但仍然不起作用。

class Map():

    latitude = 0
    longitude = 0
    xsize = 0    #in pixel
    ysize = 0    #in pixel
    mapa = [[],[]]

    def __init__(self, longitude, latitude, xs, ys):
        self.latitude = longitude
        self.longitude = latitude
        self.xsize = xs
        self.ysize = ys
        self.mapa = [[0 for x in range(self.xsize)] for y in range(self.ysize)]

    def _create_map(self):
        for y in range(self.ysize):
            for x in range(self.xsize):
                self.mapa[x][y] = Point()

【问题讨论】:

  • 您是否尝试在定义数组的行初始化数组?

标签: python arrays object variable-assignment


【解决方案1】:

您的 x 和 y 维度混淆了。如果您想以self.mapa[x][y] 访问嵌套列表,那么您将从self.mapa 获取第x 个列表,并从该内部列表中获取第y 个元素。

所以你需要将它初始化为:

self.mapa = [[0 for y in range(self.ysize)] for x in range(self.xsize)]

self.mapa = [[0]*self.ysize for x in range(self.xsize)]

xsize 列出每个长度ysize,而不是ysize 列出每个长度xsize

【讨论】:

  • ²谢谢我做了你提议的改变,我也改变了:def _create_map(self): for y in range(self.ysize - 1): for x in range(self.xsize - 1): self.mapa.append(Point())
猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 2011-11-23
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多