如何在Networkx中快速找到入边完全相同的节点组?
在NetworkX中找出入边完全相同的节点组
核心思路是通过节点的入邻接节点集合作为标识,将拥有相同标识的节点归类到同一组。具体实现步骤如下:
实现代码
import networkx as nx from collections import defaultdict # 1. 构建示例图 G = nx.DiGraph() edges = [(1, 2), (1, 3), (1, 4), (3, 4)] G.add_edges_from(edges) # 2. 按入邻接节点集合分组 in_neighbor_groups = defaultdict(list) for node in G.nodes(): # 将入邻接节点转为frozenset(可哈希,能作为字典键) in_neighbors = frozenset(G.predecessors(node)) in_neighbor_groups[in_neighbors].append(node) # 3. 过滤出包含多个节点的组 result = [group for group in in_neighbor_groups.values() if len(group) >= 2] print(result) # 输出: [[2, 3]]
关键说明
G.predecessors(node):返回当前节点所有入边的来源节点,是NetworkX中获取入邻接节点的高效方法frozenset:将普通集合转为不可变的可哈希类型,这样才能作为字典的键来分组defaultdict:简化分组逻辑,自动为新的入邻接集合创建空列表,避免手动判断键是否存在
内容的提问来源于stack exchange,提问作者Alireza
相关产品推荐
相关产品推荐

