解决 Python NetworkX 中的 ValueError: not enough values to unpack (expected 3, got 2)
在使用 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 列表只包含了起始节点和结束节点,而没有权重。为了解决这个问题,你需要将 edges 和 weights 列表重新组合成一个包含三元组的列表,然后将这个列表传递给 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)
希望这个解释对你有帮助!
原文地址: https://www.cveoy.top/t/topic/fPRe 著作权归作者所有。请勿转载和采集!