Networkx中终端节点的邻居

时间:2020-08-30 15:56:54

标签: python-3.x graph 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]))

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

G[4]返回一个空字典,因为该节点没有传出边。而G.in_edges(nbunch=[4])返回(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]返回空也返回空结果的原因是,对于DiGraphs,DiGraph.neighborsDiGraph.successors是相同的。您可以从源代码here中看到。由于终端节点没有后继节点,因此我们得到一个空列表。