【发布时间】:2014-06-19 17:43:50
【问题描述】:
我正在尝试遍历矩阵并检查与当前单元格接触且值为 1 的单元格的数量。我遇到了超出范围的异常,但我不知道为什么。
for x in range(0,ROWS):
for y in range(0,COLS):
#get neighbors
neighbors = []
if x!=0 & y!=COLS:
neighbors.append([x-1,y+1])
if y!=COLS:
neighbors.append([x,y+1])
if x!=ROWS & y!=COLS:
neighbors.append([x+1,y+1])
if x!=0:
neighbors.append([x-1,y])
if x!=ROWS:
neighbors.append([x+1,y])
if x!=0 & y!=0:
neighbors.append([x-1,y-1])
if y!=0:
neighbors.append([x,y-1])
if x!=ROWS & y!=0:
neighbors.append([x+1,y-1])
#determine # of living neighbors
alive = []
for i in neighbors:
if matrix[i[0]][i[1]] == 1:
alive.append(i)
我收到了错误
IndexError: 列表索引超出范围
在这一行if matrix[i[0]][i[1]] == 1:
为什么超出范围,我应该如何解决?
【问题讨论】:
-
if cells[i[0]][i[1]] == 1:不在您的代码中。假设您的意思是if matrix[i[0]][i[1]] == 1:,您能否更具体地了解matrix在此行之前的值是什么? -
当我复制粘贴到 stackoverflow 时,我将单元格重命名为矩阵,以便更清楚地了解它是什么,我只是忘记在帖子底部重命名它。我已经编辑了我的帖子,现在应该更有意义了。在此之前,矩阵用 0 或 1 填充,随机分布。
-
如果您提供完整的堆栈跟踪,而不仅仅是异常,会更有帮助。
-
if x!=ROWS & y!=0: neighbors.append([x+1,y-1])如果这里的 x 是 ROWS-1(定义范围的最后一个)。在 x 上加一会在以后产生索引错误。假设 ROWS\COLS 是实际行数\cols。 -
OP:我在回答中提到了这一点,但通常矩阵是从左到右、从上到下的。尽管您在这里似乎没有遇到这个问题,但在大多数情况下,您想要执行
for x in range(COLS); for y in range(ROWS)和matrix[y][x]
标签: python loops for-loop iteration indexoutofboundsexception