matrix = [[true, false, false],
[false, true, false],
[false, false, false]]
[1] [2]和[2] [1]都有2个真实的围绕它们。所以该元素位置的计数为2.剩余的位数为1,因为它们被1个元素包围。
result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
for x in [1,0,-1]:
for y in [1,0,-1]:
if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
result[i][j]= matrix[i+x][j+y]
return result
这是预期的产出
output= [[1, 2, 1],
[2, 1, 1],
[1, 1, 1]]
但我得到的输出为
[[true,true,false],
[true,true,false],
[false,false,true]]
两个问题。第一个发生在你的for循环中。你不想计算当前的索引并且只想对它的邻居进行采样,所以你想抛弃x == y == 0
的情况。通过添加像if x == y == 0: continue
这样的if语句来完成此操作
第二个问题是您设置的值不会增加它。这里:result[i][j]= matrix[i+x][j+y]
仅将值设置为True
,并且在检测到其他邻居时不会增加它。而是添加像:result[i][j] += matrix[i+x][j+y]
通过这两种修复,您可以获得正确的输出:
true = True
false = False
matrix = [[true, false, false],
[false, true, false],
[false, false, false]]
result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
for x in [1,0,-1]:
for y in [1,0,-1]:
if x == y == 0: continue
if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
result[i][j] += matrix[i+x][j+y]
for i in result:
print(i)
输出:
[1, 2, 1]
[2, 1, 1]
[1, 1, 1]
你的代码应该是
result[i][j] += matrix[i+x][j+y]
(注意+=
而不是=
)