如何引用矩阵中的相邻元素?

时间:2016-07-20 23:41:17

标签: python algorithm

我正在尝试制作一些代码,以便单个元素矩阵可以引用与其相邻的元素。有点像你只能将游戏块移动到相邻的空间。例如,我希望能够说出类似的内容:

if x matrix element is adjacent to y element:
     y_element_adjacent = True

我想知道如何完成这个“相邻”部分。

编辑:我已经尝试制作一个列表并为每个元素分配一个数字。因此,在100个元素列表(或10x10游戏板)中,空格1x1将是第0个元素,空格1x3将是第2个元素......就像这样:

1,2,3,4,5,6,7,8,9,10

11,12,13,14,15,16,17,18,19,20

然而,问题是如果x元素是10,我的代码将使用+ 1来查找相邻的空格,而11则不相邻。然后我意识到列表不是正确的方法,矩阵将成为一种方法。我对如何以不同于列表的方式使用它们感到有些困惑。

任何帮助表示赞赏!感谢。

1 个答案:

答案 0 :(得分:0)

这是获取所有相邻元素的索引的简单方法。

from itertools import product, starmap

x, y = (x_coordinate, y_coordinate) # matrix values here
cells = starmap(lambda a,b: (x+a, y+b), product((0,-1,+1), (0,-1,+1)))

对于x,y = (1,1)的输入,这会返回包含(list(cells)[1:])的{​​{1}}。

这种实现可能会对您的特定场景感兴趣(确定某个游戏块可能移动到哪个位置)。如果要包含边框检查,可以尝试

[(1, 0), (1, 2), (0, 1), (0, 0), (0, 2), (2, 1), (2, 0), (2, 2)]

其他解决方案(及其来源)可在此处找到:Determining neighbours of cell two dimensional list