You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NetworkX中删除中间节点并合并其相邻边为一条边?

NetworkX 合并相邻边并删除中间节点的实现方法

NetworkX 没有专门的单一API直接完成“删除中间节点并合并其相邻边”的操作,但可以通过组合现有方法轻松实现,以下是具体步骤和示例:

无向图场景

基础步骤

  1. 获取待删除节点(比如b)的所有邻居节点
  2. 在这些邻居节点之间添加新边
  3. 删除中间节点b

示例代码

import networkx as nx

# 创建初始无向图
G = nx.Graph()
G.add_edges_from([("a", "b"), ("b", "c")])

# 获取节点b的邻居
neighbors = list(G.neighbors("b"))
# 邻居间添加新边
if len(neighbors) == 2:
    G.add_edge(neighbors[0], neighbors[1])
# 删除节点b
G.remove_node("b")

# 验证结果
print(list(G.edges()))  # 输出: [('a', 'c')]

带属性边的处理

如果边带有权重等属性,需要合并属性的话,可以先提取原有边的属性再处理:

import networkx as nx

G = nx.Graph()
G.add_edge("a", "b", weight=2)
G.add_edge("b", "c", weight=3)

# 获取属性并合并
weight_ab = G.edges["a", "b"]["weight"]
weight_bc = G.edges["b", "c"]["weight"]
G.add_edge("a", "c", weight=weight_ab + weight_bc)

G.remove_node("b")
print(G.edges["a", "c"]["weight"])  # 输出: 5

有向图场景

如果是有向图,需要区分节点的前驱和后继节点,比如a→b和b→c要合并为a→c:

import networkx as nx

G = nx.DiGraph()
G.add_edges_from([("a", "b"), ("b", "c")])

# 获取前驱(指向b的节点)和后继(b指向的节点)
predecessors = list(G.predecessors("b"))
successors = list(G.successors("b"))

# 前驱到后继添加边
for pred in predecessors:
    for succ in successors:
        G.add_edge(pred, succ)

G.remove_node("b")
print(list(G.edges()))  # 输出: [('a', 'c')]

内容的提问来源于stack exchange,提问作者zjffdu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:44