Networkx 中终端节点的邻居

Neighbor of a terminal node in Networkx

我正在尝试获取 Networkx 中终端节点的邻居节点

import networkx as nx

tail = [1,2,3]
head = [2,3,4]
ed_ls = [(t, h) for t, h in zip(tail, head)]
G = nx.OrderedDiGraph()
G.add_edges_from(ed_ls)

print(G[4])
print(G.in_edges(nbunch=[4]))

我不确定为什么会返回空字典。

有什么建议吗?

G[4] returns 是一个空字典,因为节点没有出边。而 G.in_edges(nbunch=[4]) returns (3, 4) 是包含节点 4.

的边

如果我没理解错的话,你特意要访问一个终端节点的邻居?现在在那种情况下,终端节点的邻居只是该节点的前任(因为该节点没有后继者),您可以简单地尝试函数 Digraph.predecessors:

print(list(G.predecessors(4)))
# Output : [3]

考虑另一个有更多边的例子:

import networkx as nx

tail = [1, 2, 3, 4, 2, 3]
head = [2, 3, 4, 5, 5, 5]
ed_ls = [(t, h) for t, h in zip(tail, head)]
G = nx.OrderedDiGraph()
G.add_edges_from(ed_ls)

print(list(G.predecessors(5)))
# Output: [4, 2, 3]

更新

之所以 G.neighbors[4] return 一个空的 return 一个空的结果是因为在有向图的情况下,DiGraph.neighborsDiGraph.successors 是相同的.从源码可以看出here。由于终端节点没有后继者,因此我们得到一个空列表。