确定单元二维列表的邻居

发布于 2021-01-29 19:34:10

我有一个清单清单,例如

[[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。

现在我意识到,我可以对每个值进行一次暴力攻击:

[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]

但这很容易,我认为我可以通过查看一些更优雅的方法来学习更多。

关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    # 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)]
    

    我不知道这是否干净,但是这种单行代码可以遍历所有邻居并丢弃任何边缘情况,从而为您提供所有邻居。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看