我使用NetworkX创建了以下图形。
该图是使用以下方法创建的:
G = nx.grid_2d_graph(4,3)
接下来,两个节点将根据其位置进行修改(仅用于解释图示,不影响答案)。
使用以下代码:
G.neighbors((1, 1))
输出:
[(0, 1), (1, 2), (1, 0), (2, 1)]
除此之外,我需要的要点是:
[(0, 2), (2, 2), (2, 0), (0, 0)]
这将形成一个“循环”,围绕(1,1)包含该“循环”中的所有节点。由于我不知道图形术语的正确命名,因此很难搜索我要查找的内容。
编辑:
在受到@orestiss的启发并试验之后,我想出了这个方法。
l = list()
center = (1, 1)
for neighb in G.neighbors(center):
others = [n for n in G.neighbors(center) if n != neighb]
for other in others:
l.append([n for n in nx.common_neighbors(G, neighb, other) if n != center])
l.append([neighb])
lf = list(set([item for sublist in l for item in sublist]))
通过这个方法,我可以获取所有在中心周围循环的节点,但不包括中心本身。这对于边界节点也有效。