NetworkX 递归子节点
Posted
技术标签:
【中文标题】NetworkX 递归子节点【英文标题】:NetworkX recursive child nodes 【发布时间】:2017-10-01 18:37:44 【问题描述】:使用最新的 NetworkX(撰写本文时为version 1.11),检索给定节点的所有(递归)子节点的最有效方法是什么?successors()
函数检索直接子级,在以前的版本中有 dfs_preorder_nodes solution
。
【问题讨论】:
dfs_preorder_nodes
有什么问题?
啊,我的错!直到现在,我只能找到以前的版本。出于某种原因,认为最新版本具有类和基于类的方法。干杯!
【参考方案1】:
有一个 descendants 方法可以找到所有子节点,包括每个子节点的子节点:
1-2 \ 3 \ 4
import networkx as nx
G = nx.DiGraph()
G.add_edge(1, 2)
G.add_edge(1, 3)
G.add_edge(2, 4)
res = nx.descendants(G, 1)
print (res) #2,3,4
【讨论】:
【参考方案2】:dfs_preorder_nodes 在最新版本中仍然有效,正如 Joel 指出的那样。该文档可在here 获得。
以下实现了所需的,即感兴趣节点的所有递归子节点:
import networkx as nx
children = [node for node in nx.dfs_preorder_nodes(network, queryID)]`
【讨论】:
你也可以children = list(nx.dfs...)
把生成器变成一个列表。以上是关于NetworkX 递归子节点的主要内容,如果未能解决你的问题,请参考以下文章