首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维列表中超出范围的列表索引

二维列表中超出范围的列表索引
EN

Stack Overflow用户
提问于 2016-05-10 04:44:54
回答 1查看 1K关注 0票数 2

我知道有类似于这个herehere,和here的问题。第一个是1D列表,第二个是很棒的,除了它似乎不工作,第三个是接近,但我仍然不太明白我的问题。

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

以下是我尝试过的:

代码语言:javascript
复制
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)并获取周围的点。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

我添加了这些print语句(point.toString()返回(x,y)),以便在它们发生时向我显示点,并且我能够迭代直到x==14,但它在x==15处中断。

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

如果我解释得不够清楚就告诉我。

编辑这里是回溯:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/nu/catkin_ws/src/apriltags_intrude_detector/scripts/sphero_intrude_gui.py", line 70, in start
    self.populatePaths()
  File "/home/nu/catkin_ws/src/apriltags_intrude_detector/scripts/sphero_intrude_gui.py", line 156, in populatePaths
    self.addPaths(column, row)
  File "/home/nu/catkin_ws/src/apriltags_intrude_detector/scripts/sphero_intrude_gui.py", line 162, in addPaths
    self.removeBarriersFromPath(points)
  File "/home/nu/catkin_ws/src/apriltags_intrude_detector/scripts/sphero_intrude_gui.py", line 168, in removeBarriersFromPath
    if not self.isPointAccessible(point.x, point.y):
  File "/home/nu/catkin_ws/src/apriltags_intrude_detector/scripts/sphero_intrude_gui.py", line 173, in isPointAccessible
    return self.grid[x][y] == 0
IndexError: list index out of range
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 05:00:24

您没有发布isPointAccessible的全部源代码,但从错误消息看,您的返回行必须如下:

代码语言:javascript
复制
return self.grid[y][x] == 0

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37129440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档