Python & NetworkX - 如何检查节点是否为自循环节点



我有一个表,其中有两个类似这样的ID字段,父级可以链接到它自己:

父级
子级
1 1
2 1
3 1
4 2
5 3
def has_self_loop(G: nx.Graph, node):
try:
if G[node][node] != None:
return True
except Exception:
return False

G_edges = [(1, 1), (2, 1), (2, 3), (3, 3)]
G = nx.Graph()
G.add_edges_from(G_edges)
[print(node, "has self loop") for node in G.nodes() if has_self_loop(G, node) == True]

输出:

1 has self loop
3 has self loop

是。以节点为键,以字典的形式访问DiGraph将返回一个AtlasView,它提供该节点的所有边。例如

>>> g[2]
AtlasView({1: {}})

因此,要查找节点是否有连接回自身的边,只需检查该视图中是否存在该节点。

def is_self_looped(g, node):
return node in g[node]

在您的示例中,只有1具有自循环。

>>> for node in g.nodes:
...     print(node, is_self_looped(g, node))
... 
1 True
2 False
3 False
4 False
5 False

最新更新