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
Wo bricht es? Können Sie das Traceback buchen? – Selcuk
Ich habe es versäumt, diesen Teil einzufügen. Er enthält jetzt das Traceback sowie die Information, wo es zerbricht ('self.isPointAccessible') –