我了解此问题与here,here和here存在类似问题。第一个列出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
答案 0 :(得分:1)
您没有发布isPointAccessible
的完整来源,但是从错误消息中看来您的返回行必须是:
return self.grid[y][x] == 0
因为y
表示行号,x
是列。