def is_inside(x, y):
return 0 <= x < len(m[0]) and 0 <= y < len(m)
def diagonal_sum(x, y):
return sum([m[x - 1][y - 1] if is_inside(x - 1, y - 1) else 0,
m[x - 1][y + 1] if is_inside(x - 1, y + 1) else 0,
m[x + 1][y - 1] if is_inside(x + 1, y - 1) else 0,
m[x + 1][y + 1] if is_inside(x + 1, y + 1) else 0])
def vertical_sum(x, y):
return sum([m[x][y - 1] if is_inside(x, y - 1) else 0,
m[x][y + 1] if is_inside(x, y + 1) else 0,
m[x - 1][y] if is_inside(x - 1, y) else 0,
m[x + 1][y] if is_inside(x + 1, y) else 0])
m = [[4,5,0,0,0],
[5,1,2,1,0],
[0,2,3,2,0],
[0,1,2,1,0],
[0,0,0,0,0]]
diagonal = []
vertical = []
for i in range(len(m)):
diagonal.append([])
vertical.append([])
for j in range(len(m[0])):
diagonal[i].append(diagonal_sum(i, j))
vertical[i].append(vertical_sum(i, j))
print(diagonal)
# prints:
#
# [[1, 7, 2, 2, 1],
# [7, 7, 9, 3, 2],
# [2, 9, 4, 4, 2],
# [2, 3, 4, 3, 2],
# [1, 2, 2, 2, 1]]
print(vertical)
# prints:
#
# [[10, 5, 7, 1, 0],
# [5, 14, 5, 4, 1],
# [7, 5, 8, 5, 2],
# [1, 4, 5, 4, 1],
# [0, 1, 2, 1, 0]]
如果你需要对角线和垂直线的总和:
def is_inside(x, y):
return 0 <= x < len(m[0]) and 0 <= y < len(m)
def neighbour_sum(x, y):
r = 0
for i in range(y - 1, y + 2):
for j in range(x - 1, x + 2):
if is_inside(i, j):
r += m[i][j]
return r
m = [[4,5,0,0,0],
[5,1,2,1,0],
[0,2,3,2,0],
[0,1,2,1,0],
[0,0,0,0,0]]
result = []
for i in range(len(m)):
result.append([])
for j in range(len(m[0])):
result[i].append(neighbour_sum(i, j))
print(result)
# prints:
#
# [[15, 17, 9, 3, 1],
# [17, 22, 16, 8, 3],
# [9, 16, 15, 11, 4],
# [3, 8, 11, 8, 3],
# [1, 3, 4, 3, 1]]