如何用NetworkX生成图中所有节点的全连接关系列表?
解决方案
方法思路
你需要的是图中所有连通节点的有序对(包含直接边和间接可达的节点对),再通过逆序对实现按首节点过滤所有关联节点。由于你的图是连通图(所有节点都在一个连通分量里),所有不同节点间都存在路径,因此可以直接生成所有u≠v的有序节点对;如果图存在多个连通分量,则只需针对每个分量内的节点生成对即可。
代码实现
import networkx as nx import pandas as pd # 初始化图 test = {'first': ['a', 'b', 'c'], 'next': ['b', 'c', 'd']} dftest = pd.DataFrame(data=test) G = nx.from_pandas_edgelist(dftest, 'first', 'next') # 获取所有节点 nodes = list(G.nodes()) # 生成所有u≠v的有序节点对(包含直接和间接连通的所有情况) all_connected_pairs = [(u, v) for u in nodes for v in nodes if u != v] # 转换为你需要的逗号分隔格式的列表 result_list = [f"{pair[0]},{pair[1]}" for pair in all_connected_pairs] # 输出结果 for item in result_list: print(item)
输出结果
运行后会得到所有有序节点对,包含你示例中的正向及逆序对:
a,b a,c a,d b,a b,c b,d c,a c,b c,d d,a d,b d,c
多连通分量场景适配
如果你的图存在多个不连通的分量,只需针对每个连通分量单独生成节点对:
all_connected_pairs = [] for component in nx.connected_components(G): comp_nodes = list(component) all_connected_pairs.extend([(u, v) for u in comp_nodes for v in comp_nodes if u != v])
这样处理后,你就可以通过过滤列表中首列的节点,快速获取该节点的所有直接/间接关联节点。
内容的提问来源于stack exchange,提问作者boondocks5
相关产品推荐
相关产品推荐

