列表索引超出2D列表范围

时间:2016-05-10 04:44:55

标签: python arrays list

我了解此问题与hereherehere存在类似问题。第一个列出1D列表,第二个列表很好,除了它似乎没有用,第三个列表很接近,但我仍然不太了解我的问题。

这是我想要做的。我需要创建一个2D列表(java和C ++中的2D数组,我更熟悉),填充0。它需要大小为20,大小为15。

以下是我的尝试:

self.grid = [[0 for x in range(GRID_COLUMN_SIZE)] for y in range(GRID_ROW_SIZE)] # where GRID_ROW_SIZE = 15, GRID_COLUMN_SIZE = 20

注意,我尝试使用两个常量切换(先COLUMN,然后ROW),稍后会稍稍打破。另外,我打印出2D列表并且它的尺寸错误(15个横向和20个)。

以下是我self.grid的后期使用情况。没有太深入,我正在迭代列表的所有值(grid)并得到周围的点。

def populatePaths(self):
    for row in range(len(self.grid)):
        for column in range(len(self.grid[row])):
            if self.isPointAccessible(column, row):
                self.addPaths(column, row)

def addPaths(self, x, y):
    key = Point(x, y)
    print "Each: %s" % (key.toString())
    points = key.getSurroundingPoints()
    self.removeBarriersFromPath(points)
    self.paths[key] = points # a map from Points to lists of surrounding Points

基本上,我删除了无法到达的路径上的点:

def removeBarriersFromPath(self, path):
    for point in list(path):
        print "Surrounding %s" % (point.toString())
        if not self.isPointAccessible(point.x, point.y):
            path.remove(point)
    return path

self.isPointAccessible()是微不足道的,但这就是它破裂的地方。它会检查(x,y)位置的值是否为0:return self.grid[x][y] == 0

我添加了这些打印语句(point.toString()返回(x,y))以显示发生的点数,并且我能够迭代到x==14,但它会在{{1 }}

我怀疑我在循环中得到列/行顺序不正确,但我不确定何时/如何。

如果我没有清楚地解释清楚,请告诉我。

修改以下是追溯:

x==15

1 个答案:

答案 0 :(得分:1)

您没有发布isPointAccessible的完整来源,但是从错误消息中看来您的返回行必须是:

return self.grid[y][x] == 0

因为y表示行号,x是列。