我有一个列表,比如[[1, 2, 3,],[4, 5, 6,],[7, 8, 9]]
用图形表示为:
1 2 3
4 5 6
7 8 9
我正在寻找一种优雅的方法来检查一个单元格中相邻单元格的值,水平、垂直和对角线。例如,[0][2]的邻居是[0][1]、[1][1]和[1][2]或数字2、5、6。
现在我意识到我可以做一次野蛮攻击,检查每个值la:
[i-1][j]
[i][j-1]
[i-1][j-1]
[i+1][j]
[i][j+1]
[i+1][j+1]
[i+1][j-1]
[i-1][j+1]
但这很容易,我想我可以通过看到一些更优雅的方法来了解更多。
最佳答案
# Size of "board"
X = 10
Y = 10
neighbors = lambda x, y : [(x2, y2) for x2 in range(x-1, x+2)
for y2 in range(y-1, y+2)
if (-1 < x <= X and
-1 < y <= Y and
(x != x2 or y != y2) and
(0 <= x2 <= X) and
(0 <= y2 <= Y))]
>>> print(neighbors(5, 5))
[(4, 4), (4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5), (6, 6)]
我不知道这是否被认为是干净的,但是这个一行程序通过迭代它们并丢弃任何边缘情况来给您所有的邻居。
关于python - 确定单元二维列表的邻居,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1620940/