在使用 NetworkX 库中的 add_weighted_edges_from 方法时,你可能会遇到 ValueError: not enough values to unpack (expected 3, got 2) 错误。这个错误通常发生在 add_weighted_edges_from 方法期望传入一个包含三元组的列表(表示边的起始节点、结束节点和权重),但你提供的列表却只包含了起始节点和结束节点。

例如,以下代码展示了错误的发生情况:

import networkx as nx

# 创建一个空图
G = nx.Graph()

# 定义边和权重
edges = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7),
         (1, 0), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),
         (2, 0), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7),
         (3, 0), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (3, 7),
         (4, 0), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (4, 7),
         (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7),
         (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 7),
         (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6)]
weights = [300, 360, 210, 530, 475, 500, 690,
            300, 380, 270, 230, 285, 200, 390,
            360, 380, 510, 230, 665, 490, 680,
            210, 270, 510, 230, 665, 450, 640,
            530, 230, 230, 230, 665, 450, 190,
            475, 285, 665, 450, 665, 460, 650,
            500, 200, 490, 450, 260, 460, 190,
            690, 390, 680, 640, 450, 650, 190]

# 添加加权边
G.add_weighted_edges_from(zip(edges, weights))

# 绘制图形
pos = nx.spring_layout(G)

在这个例子中,edges 列表只包含了起始节点和结束节点,而没有权重。为了解决这个问题,你需要将 edgesweights 列表重新组合成一个包含三元组的列表,然后将这个列表传递给 add_weighted_edges_from 方法。可以使用 zip 函数来完成这个操作:

G.add_weighted_edges_from(zip(edges, weights, weights))

这样,zip(edges, weights, weights) 将会返回一个包含三元组的列表,其中第三个元素即为权重。然后,你可以将这个列表传递给 add_weighted_edges_from 方法。

修改后的代码如下:

import networkx as nx

# 创建一个空图
G = nx.Graph()

# 定义边和权重
edges = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7),
         (1, 0), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),
         (2, 0), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7),
         (3, 0), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (3, 7),
         (4, 0), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (4, 7),
         (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7),
         (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 7),
         (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6)]
weights = [300, 360, 210, 530, 475, 500, 690,
            300, 380, 270, 230, 285, 200, 390,
            360, 380, 510, 230, 665, 490, 680,
            210, 270, 510, 230, 665, 450, 640,
            530, 230, 230, 230, 665, 450, 190,
            475, 285, 665, 450, 665, 460, 650,
            500, 200, 490, 450, 260, 460, 190,
            690, 390, 680, 640, 450, 650, 190]

# 添加加权边
G.add_weighted_edges_from(zip(edges, weights, weights))

# 绘制图形
pos = nx.spring_layout(G)

希望这个解释对你有帮助!

解决 Python NetworkX 中的 ValueError: not enough values to unpack (expected 3, got 2)

原文地址: https://www.cveoy.top/t/topic/fPRe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录