Ну, я бы делал так:
def neighbors(arr,row,column):
rows=len(arr)
columns=len(arr[0])
for i in range (row - 1,row + 2):
for j in range(column - 1,column + 2):
if (j >= 0 and i >= 0 and j < columns and i < rows and (not(i == row and j == column))):
print (arr[i][j])
return
b = [[9, 5, 3],[0, 7, -1],[-5, 2, 9]]
desk=[item for sublist in b for item in sublist]
for ind0, elt0 in enumerate(b):
for ind1,elt1 in enumerate( elt0):
print (ind0,ind1,'------',elt1)
neighbors(b,ind0,ind1)
Результат:
0 0 ------ 9
5
0
7
0 1 ------ 5
9
3
0
7
-1
0 2 ------ 3
5
7
-1
1 0 ------ 0
9
5
7
-5
2
1 1 ------ 7
9
5
3
0
-1
-5
2
9
1 2 ------ -1
5
3
7
2
9
2 0 ------ -5
0
7
2
2 1 ------ 2
0
7
-1
-5
9
2 2 ------ 9
7
-1
2
А при использовании numpy можно бы сделать немного быстрее и элегантнее.
Приведен самый общий случай. В случае необходимости "соседи по диагонали" тоже легко убираются.