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

如何在边权重为0/1的NetworkX无向图中创建新边

嘿,看起来你已经用NetworkX搭好了一个带0/1权重的无向图,要给它添加新边其实超简单,我给你整理了几种常用的方法,刚好能适配你的场景:

在NetworkX无向图中添加新边的方法

1. 添加单个带权重的边

直接用你创建原图时用到的G.add_edge()方法就好,完全兼容你现有的写法。比如想给节点d和e加一条权重为0的边,或者给b和c加权重1的边:

# 给d和e添加权重为0的边
G.add_edge('d', 'e', weight=0)
# 给b和c添加权重为1的边
G.add_edge('b', 'c', weight=1)

要是你没指定weight参数,这条边就不会有weight属性,不过你的场景里都是0或1权重,建议还是显式写清楚更稳妥。

2. 批量添加多条边

如果要一次性加好多边,用G.add_edges_from()效率更高。你可以传入一个列表,每个元素可以是单纯的节点对,也可以是带权重字典的三元组:

# 批量添加不同权重的边
G.add_edges_from([
    ('b', 'd', {'weight': 1}),
    ('e', 'f', {'weight': 0}),
    ('a', 'f')  # 这条边没有指定权重,不会有weight属性
])

要是你要加的新边权重都一样,还能简化写法,直接在方法里统一指定weight参数:

# 给所有新添加的边统一设置权重为1
G.add_edges_from([('b', 'e'), ('d', 'f')], weight=1)

3. 调整边的权重(可选)

如果不小心加错了权重,或者想修改已有边的权重,直接重新调用add_edge()就行——无向图里重复添加同一条边,只会更新它的属性,不会重复创建:

# 把a-c边的权重从0改成1
G.add_edge('a', 'c', weight=1)

4. 同步更新边的分类列表

你原来的代码里用elarge和esmall区分了权重1和0的边,添加新边后记得重新生成这两个列表,这样后续画图的时候新边才会被正确归类显示:

# 重新生成权重为1和0的边列表
elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 1]
esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 0]

内容的提问来源于stack exchange,提问作者Haroon S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:04:30