Возможное решение без всех этих if
операторов:
def neighbors(matrix, r, c):
def get(r, c):
if 0 <= r < len(matrix) and 0 <= c < len(matrix[r]):
return matrix[r][c]
else:
return 0
neighbors_list = [get(r-1, c-1), get(r-1, c), get(r-1, c+1),
get(r , c-1), get(r , c+1),
get(r+1, c-1), get(r+1, c), get(r+1, c+1)]
return sum(map(bool, neighbors_list))
matrix = [ [0, 0, 0, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 1, 1],
[0, 0, 1, 1, 1] ]
print(neighbors(matrix, 0, 0)) # 0
print(neighbors(matrix, 1, 2)) # 1
print(neighbors(matrix, 3, 2)) # 4
print(neighbors(matrix, 4, 4)) # 3
В случае, если ячейки будут иметь значения только 0 или 1, функция neighbors
просто возвратит sum(neighbors_list)
.