我试图找到矩阵中元素周围的邻居之和,并编写了一些函数来将布尔矩阵转换为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和0的矩阵,用于比较和邻居之和。但我不确定为什么它更新bin_mat和实际矩阵而不仅仅是实际矩阵。有人可以帮助我。
答案 0 :(得分:0)
不用担心。我想到了。问题是二元矩阵是实际矩阵的浅层副本。无论我在实际矩阵中做出的改变是在二进制矩阵中进行更新。我需要深层复制而不是浅层复制。 使用下面的代码解决了它。
import copy
bin_mt = copy.deepcopy(matrix)
而不是
bin_mt = matrix.copy()