You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

NetworkX是否有更高效的方法获取有向图中某节点的所有直接关联节点(含入边和出边)?

NetworkX是否有更高效的方法获取有向图中某节点的所有直接关联节点(含入边和出边)?

你的实现思路完全没问题,但NetworkX其实提供了一个更简洁的内置方法来一步完成这个需求——nx.all_neighbors(),专门用来获取有向图中节点的所有直接关联节点(包含入边的前驱节点和出边的后继节点)。

简化后的代码示例

import networkx as nx

# 构建示例有向图
G = nx.DiGraph()
G.add_edges_from([
    ('A','B'),
    ('B','C'),
    ('C','D'),
    ('D','E'),
    ('F','B'),
    ('B','G'),
    ('B','D'),
])

# 获取节点'B'的所有直接关联节点
node = 'B'
neighbours = list(nx.all_neighbors(G, node))
print(neighbours)
# 输出结果:['A', 'F', 'C', 'G', 'D']

关于这个方法的说明

  • 功能层面:nx.all_neighbors()在处理有向图时,会自动合并G.predecessors(node)G.successors(node)的结果,和你手动拼接的逻辑完全一致。
  • 效率层面:它的内部实现本质上也是分别遍历前驱和后继节点再合并,和你的写法效率相差无几,但胜在代码更简洁、可读性更强,省去了手动写列表推导式和拼接的步骤。
  • 内存优化:如果不需要将结果存储为列表,直接使用nx.all_neighbors(G, node)返回的迭代器即可,还能节省内存占用。

备注:内容来源于stack exchange,提问作者Robert Alexander

火山引擎 最新活动