我以这种方式在列表中表示python中的图形:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我现在想要的是特定节点的所有相邻元素吗?
例如
1 -> 2, 4, 5
5 -> 1, 2, 3, 4, 6, 7, 8, 9
我理解的方法是将i-1,i + 1,j-1,j + 1与i和j组合为行和列。但似乎很自然地适合于在for循环中放置边界约束的C解决方案。
是否有一种pythonic方法可以在不检查所有8种可能选择的边界约束的情况下进行。
我无需订购。这里的矩阵可以是任何m x n。
答案 0 :(得分:1)
您可以使用itertools.product
:
>>> from itertools import product
>>> lis = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> points = list(product([0, 1, -1], repeat=2))[1:]
def get_adj_items(i, j, m, n, lis):
return [lis[i+x][j+y] for x, y in points
if 0 <= x+i < m and 0 <= y+j < n]
...
>>> get_adj_items(0, 0, 3, 3, lis)
[2, 4, 5]
>>> get_adj_items(1, 1, 3, 3, lis)
[6, 4, 8, 9, 7, 2, 3, 1]
2X4矩阵:
>>> lis = [[1, 2, 3 ,4], [5, 6 ,7 ,8]]
>>> get_adj_items(1, 1, 2, 4, lis) #items adjacent to 6
[7, 5, 2, 3, 1]