问题描述
我正在尝试获取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]
返回一个空字典,因为该节点没有传出边。而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,3]
head = [2,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,3]
更新
即使G.neighbors[4]
返回空也返回空结果的原因是,对于DiGraphs,DiGraph.neighbors
和DiGraph.successors
是相同的。您可以从源代码here中看到。由于终端节点没有后继节点,因此我们得到一个空列表。