Python 2.7 NetworkX:如何筛选特定权重的邻居节点
获取NetworkX中满足权重条件的邻居节点方案(Python 2.7)
Hey Tim, 针对你在Python 2.7环境下使用NetworkX库,需要筛选出权重符合特定值或条件的邻居节点的需求,我整理了两个实用的实现方案:
方案一:遍历邻居节点并校验边权重
networkx.Graph.neighbors() 方法只会返回目标节点的邻居节点,不会附带边的权重信息,所以我们可以先拿到所有邻居,再逐个获取对应边的权重进行判断。
示例代码:
import networkx as nx # 先创建一个带权重的示例图 G = nx.Graph() G.add_edge('A', 'B', weight=5) G.add_edge('A', 'C', weight=10) G.add_edge('A', 'D', weight=5) G.add_edge('B', 'C', weight=3) def get_neighbors_by_weight(graph, node, weight_condition): """ 获取满足权重条件的邻居节点 :param graph: NetworkX图对象 :param node: 目标节点 :param weight_condition: 权重判断函数,比如lambda w: w ==5 或 lambda w: w >7 :return: 符合条件的邻居列表 """ qualified_neighbors = [] for neighbor in graph.neighbors(node): # 获取当前边的权重,默认如果没有weight属性可以设默认值 edge_weight = graph[node][neighbor].get('weight', 0) if weight_condition(edge_weight): qualified_neighbors.append(neighbor) return qualified_neighbors # 示例1:获取节点A权重等于5的邻居 print(get_neighbors_by_weight(G, 'A', lambda w: w == 5)) # 输出: ['B', 'D'] # 示例2:获取节点A权重大于7的邻居 print(get_neighbors_by_weight(G, 'A', lambda w: w > 7)) # 输出: ['C']
方案二:直接遍历边并筛选
如果不想先调用neighbors(),也可以直接遍历图中所有和目标节点相关的边,通过边的信息筛选邻居:
示例代码:
def get_neighbors_by_weight_v2(graph, node, weight_condition): qualified_neighbors = [] # 遍历所有和node相连的边,data=True会返回边的属性字典 for u, v, attrs in graph.edges(node, data=True): edge_weight = attrs.get('weight', 0) # 确定邻居节点(因为边是u-v,u是目标node的话邻居是v,反之则是u) neighbor = v if u == node else u if weight_condition(edge_weight): qualified_neighbors.append(neighbor) return qualified_neighbors # 测试同样的条件 print(get_neighbors_by_weight_v2(G, 'A', lambda w: w ==5)) # 输出: ['B', 'D']
注意事项
- 确保你的图中的边都带有
weight属性,如果部分边没有,记得在get('weight', 0)里设置合理的默认值,避免KeyError。 - Python 2.7中
print是语句,所以示例里直接用print()没问题,但如果是单独输出结果可以直接写print result。
内容的提问来源于stack exchange,提问作者Tim D
相关产品推荐
相关产品推荐

