【发布时间】:2018-03-13 14:26:04
【问题描述】:
我试图找到矩阵中一个元素周围的邻居的总和,并编写了几个函数来将布尔矩阵转换为 1 和 0 并找到邻居。但我不确定它为什么会抛出以下错误
matrix=[[True,False,False],[False,True,False],[False,False,False]]
def minesweeper(matrix):
matrix=[[1 if j==True else 0 for j in i] for i in matrix]
bin_mt = matrix.copy()
print(bin_mt)
for i in range(len(matrix)):
for j in range(len(matrix[0])):
matrix[i][j]=get_neighbors(i,j,matrix, bin_mt)
print('matrix: '+str(matrix))
print('bin_mt: '+str(bin_mt))
print(matrix)
return matrix
def get_neighbors(a, b, matrix, bin_mt):
sum=0
if bin_mt[a][b]==1:
return 1
else:
for i in find_neighbor_indices(matrix,a,b):
print(bin_mt[i[0]][i[1]], end=' ')
sum=sum+bin_mt[i[0]][i[1]]
print('--')
return sum
def find_neighbor_indices(matrix, i, j, dist=1):
neighbors = []
irange = range(max(0,i-dist), min(len(matrix), i+dist+1))
if len(matrix) > 0:
jrange = range(max(0, j - dist), min(len(matrix[ 0 ]), j + dist + 1))
else:
jrange = []
for icheck in irange:
for jcheck in jrange:
if icheck != i or jcheck != j:
neighbors.append((icheck, jcheck))
return neighbors
minesweeper(matrix)
PS:我已经更新了代码。但是,我创建了一个包含 1 和 0 的矩阵,用于比较和邻居的总和。但我不确定为什么它同时更新 bin_mat 和实际矩阵,而不仅仅是实际矩阵。有人可以帮我解决这个问题。
【问题讨论】:
-
您将
i ([True, False, False])传递给get_neighbors作为a,然后将a ([True, False, False])传递给find_neighbor_indices作为i,因此i是一个列表 -
您的错误信息与您的代码不匹配 - 里面没有这样一行。
-
Using convolution,你可以在一个地方做到这一点
-
@很快我已经更新了代码。但是,我没有得到预期的输出。请帮我解决这个问题。
-
请学习如何使用调试器
标签: python python-3.x python-2.7 list matrix