matrix = [[true, false, false],
[false, true, false],
[false, false, false]]
[1] [2]和[2] [1]周围都有2个true。因此该元素位置的计数为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]]
答案 0 :(得分:3)
两个问题。第一次发生在您的for循环中。您不想计算当前索引,而只想对它的邻居进行抽样,因此您想排除x == y == 0
的情况。为此,添加一个if x == y == 0: continue
第二个问题是您要设置的值不递增。这里的内容: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]
答案 1 :(得分:1)
您的代码应为
result[i][j] += matrix[i+x][j+y]
(请注意,用+=
代替=
)