2016-05-10 9 views
2

Ich verstehe, dass es ähnliche Fragen zu diesem here, here und here gibt. Der erste ist 1D-Listen, der zweite ist großartig, außer es scheint nicht zu funktionieren, und der dritte ist in der Nähe, aber ich verstehe mein Problem immer noch nicht ganz.Listenindex außerhalb des Bereichs in 2D-Liste

Hier ist was ich versuche zu tun. Ich muss eine 2D-Liste erstellen (ein 2D-Array in Java und C++, mit dem ich viel vertrauter bin), das mit Nullen gefüllt ist. Es muss Größe 20 quer und 15 runter sein.

Hier ist, was ich versucht habe:

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 

Hinweis habe ich versucht, mit den beiden Konstanten geschaltet (COLUMN zuerst, dann ROW), und es brach später leicht. Außerdem drucke ich die 2D-Liste aus und es sind die falschen Dimensionen (15 quer und 20 runter).

Hier ist meine spätere Verwendung von self.grid. Ohne zu tief zu gehen, durchlaufe ich alle Werte der Liste (grid) und bekomme die umliegenden Punkte.

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 

Grundsätzlich ich Punkte auf dem Weg zu entfernen, die nicht erreicht werden kann:

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() trivial ist, aber das ist, wo es bricht. Es wird geprüft, ob der Wert am (x,y) Lage ist 0: return self.grid[x][y] == 0

ich diese print-Anweisungen hinzugefügt (point.toString() kehren (x,y)) mir die Punkte zu zeigen, wie sie geschehen, und ich bin in der Lage, bis x==14 zu wiederholen, aber es bricht um x==15.

Ich vermute, dass ich die Reihenfolge der Spalten/Zeilen in der Schleife falsch bin, aber ich bin mir nicht sicher wann/wie.

Lassen Sie mich wissen, wenn ich etwas nicht deutlich genug erklärt habe.

bearbeiten ist die Zurückverfolgungs:

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 
+0

Wo bricht es? Können Sie das Traceback buchen? – Selcuk

+0

Ich habe es versäumt, diesen Teil einzufügen. Er enthält jetzt das Traceback sowie die Information, wo es zerbricht ('self.isPointAccessible') –

Antwort

1

Sie schreiben nicht die ganze Quelle für isPointAccessible aber von der Fehlermeldung sieht es aus wie Ihre Rückleitung sein muss:

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

seit y bezeichnet die Zeilennummer und x ist die Spalte.

+0

Oh! Das war's! Btw, 'return self.grid [x] [y] == 0 'war die gesamte Methode. –

Verwandte Themen