创建对象分配超出范围

时间:2018-03-28 08:32:35

标签: python arrays object variable-assignment

我尝试创建一个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()

1 个答案:

答案 0 :(得分:1)

您的x和y维度混淆了。如果您想以 public void addState(String statename) { State state = new State(); state.name = statename; statelist.add(state); } public State getStateByName(String stateName){ for(State state : statelist) if(state.name == stateName) return state; } 的形式访问嵌套列表,那么您将从self.mapa[x][y]获取第x个列表,并从该内部列表中获取第y个元素。

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

self.mapa

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长度。