Networkx common_neighbors过滤异常,无法正确返回公共邻居列表
异常原因
nx.common_neighbors返回的是迭代器对象,迭代器仅支持单次遍历,首次通过list(neighbor)计算长度时就已经将迭代器清空,后续所有对该迭代器的打印、遍历、排序操作都会得到空结果- 原代码中
filtered_nodes、neighbors变量未提前初始化,也会导致后续运行报错
修复方案
首次获取公共邻居时就直接转为列表保存,后续所有操作都复用这个列表即可,修正后的代码如下:
# 提前初始化变量 filtered_nodes = [central_node] # 先保留中心节点a neighbors = {} for node in subgraph.nodes: if node == central_node: # 跳过中心节点自身对比逻辑 continue # 首次取值就转为列表存储,后续所有操作复用该列表 common_nei_list = list(nx.common_neighbors(subgraph, central_node, node)) n = len(common_nei_list) print(node, n) print(common_nei_list) if n >= 3: # 匹配公共邻居数≥3的筛选规则 neighbors[node] = n filtered_nodes.append(node) filtered_nodes.extend(sorted(common_nei_list)) # 对筛选后的节点去重,避免重复添加 filtered_nodes = list(set(filtered_nodes)) # 生成最终过滤后的子图 filtered_graph = subgraph.subgraph(filtered_nodes)
效果验证
运行后可以看到节点e的公共邻居列表为['b', 'c', 'g'],长度为3符合筛选条件,和你预期的输出结果一致。
内容的提问来源于stack exchange,提问作者NicolasP
相关产品推荐
相关产品推荐

