给定以下代码:
G = {1: [[2, 3], [3, 22], [5, 4]], 2: [[1, 3], [3, 5]], 3: [[2, 3], [1, 22], [5, 20], [4, 9]], 5: [[1, 2], [3, 20], [4, 4]],
4: [[3, 9], [5, 4]]}
V = {1: 5, 2: 17, 3: 8, 4: 3, 5: 1}
N=2
for i in range(N):
x=int(input())
y=int(input())
for i in range(1,6):
if i != x:
if i != y:
for vertex in V:
for node, edges in G.items():
if i == vertex:
if node == vertex:
for weight in edges:
weight[1] += V[vertex]
我希望每次在第一个循环中迭代时字典 G
都保持不变。但是,每次迭代时 G
都会被覆盖,因此我得到错误的输出。我应该向我的代码添加/修改什么,以便 G
在第一个 for 循环的每次迭代后保持不变?
作为参考,这里是我的输出和我想要的输出:
output1: {1: [[2, 8], [3, 27], [5, 9]], 2: [[1, 3], [3, 5]], 3: [[2, 11], [1, 30], [5, 28], [4, 17]], 5: [[1, 3], [3, 21], [4, 5]], 4: [[3, 9], [5, 4]]}
(WRONG) output2: {1: [[2, 8], [3, 27], [5, 9]], 2: [[1, 20], [3, 22]], 3: [[2, 11], [1, 30], [5, 28], [4, 17]], 5: [[1, 4], [3, 22], [4, 6]], 4: [[3, 12], [5, 7]]}
(CORRECT) output2: {1: [[2, 3], [3, 22], [5, 4]], 2: [[1, 20], [3, 22]], 3: [[2, 3], [1, 22], [5, 20], [4, 9]], 5: [[1, 3], [3, 21], [4, 5]], 4: [[3, 12], [5, 7]]}
答案 0 :(得分:1)
尝试将 from copy import deepcopy
添加到您的导入语句中,然后在您希望 G 的新副本使用的循环开始处写入 G_copy = deepcopy(G)
然后代替 G.items()
使用G_copy.items()
尽管正如其他人指出的那样 - 除非您在此处添加更多代码,否则这将毫无意义,因为除非您在某处使用所有新的 G_copy
,否则您将在每次循环后丢弃结果。< /p>