Я нашел следующее решение, которое заботится о крайних случаях. Не уверен, что есть более питонический путь.
a = [[0, 1, 2, 3,],
[4, 5, 6, 7,],
[8, 9, 10, 11],
[12, 13, 14, 15]]
def print_edge_values(outer_idx, outer_len, inner_idx, inner_len):
print("sorrounding values: "),
for i in range(max(0, outer_idx-1), min(outer_idx+2, outer_len)):
for j in range(max(0, inner_idx-1), min(inner_idx+2, inner_len)):
if((i,j) != (outer_idx, inner_idx)):
print((i, j), "=", a[i][j], " "),
print("")
for idx, item in enumerate(a):
print(idx,":", item)
for idx2, i in enumerate(item):
print("value(%d, %d)= %d" % (idx, idx2, a[idx][idx2]))
print_edge_values(idx, len(a), idx2, len(item))