在python中读取图形中的相邻元素

时间:2013-10-13 17:40:23

标签: python graph

我以这种方式在列表中表示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。

1 个答案:

答案 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]