我有一个表,其中有两个类似这样的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