如何在networkx中找到没有出边的节点?

7

我正在尝试在networkx中查找有无出边的节点。

有没有一种方法可以做到这一点?我发现了isolates,但它只能找到既没有入边也没有出边的节点,而我不想要那些。


2
不确定是否有内置的功能,但是使用 out_degree 然后过滤结果怎么样? - jackarms
3个回答

5

如果 G 是您的 DiGraph,那么您可以通过以下方式获取汇点的迭代器:

(node for node, out_degree in G.out_degree_iter() if out_degree == 0)

AttributeError: 'DiGraph' object has no attribute 'out_degree_iter' - alper
1
@alper; 从NetworkX 2开始,out_degree_iter不再存在;您可以直接使用out_degree代替。 - fuglede

4
"返回迭代器的方法已被删除,因此在NetworkX 2.x中,@fuglede的答案需要进行小幅更新:"
(node for node, out_degree in G.out_degree() if out_degree == 0)

2.x提供的.out_degree视图/报告API提供了一个OutDegreeView,用于(node, out_degree)对,使这种方法比@Fony Lew的方法稍微简单一些。

1

我在使用out_degree_iter()时遇到了问题,它返回了一个错误。于是我在NetworkX文档中查找其他解决方案,并发现以下方法可行。(G是一个DiGraph

[node for node in G.nodes if G.out_degree(node) == 0]

请注意,如果需要查找入度或边缘,您只需将out_degree更改为in_degree即可。
参考:networkx.DiGraph.out_degree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接