gpt4 book ai didi

Python - 一个变量不应该等于另一个变量

转载 作者:太空狗 更新时间:2023-10-29 22:00:17 26 4
gpt4 key购买 nike

这是我的示例代码。它是 gauss seidel(矩阵求解器)的迭代过程。本质上,当错误足够小时,它就会跳出 while 循环。

i=1
while (i>0):
x_past = x_present

j=0
while(j<3):
value=0
k=0
while(k<3):
if(k!=j):
if(i==1):
if(k>j):
value=value+0
else:
value=value+x_present[k]*eqn[j][k]
else:
value=value+x_present[k]*eqn[j][k]
else:
value=value+eqn[j][k]
k=k+1
x_present[j:j+1]=[value]
j=j+1
print "X_PAST"
print x_past
print "X_PRESENT"
print x_present
if(error(x_past, x_present)<10**-2):
break;
i=i+1

我减少了代码,使其更易于管理。如果你不明白它在做什么,那么它对解决这个问题就没有那么重要了。

问题来了。每次

x_present[j:j+1]=[value]

运行时,x_past 等于 x_present。我不知道为什么会这样,因为我将 x_past 设置为等于 x_present 的唯一位置是在循环的顶部。如果我拿走

x_past=x_present

句子,x_past 永远不会等于 x_present。这使我认为是导致问题的两个语句的某种组合。

这是一个大问题,因为如果 x_past = x_present 每次错误 = 0 并且循环在第一次迭代后中断。代码确实有效,例如,如果我告诉代码运行 8 次迭代,然后中断,它会给我应有的答案。

在过去的 4 个小时里,我一直在努力解决这个问题,但我完全被难住了。我使用 python 的时间不长,所以我在语法方面的故障排除技巧并不是那么好。任何帮助将不胜感激!!

最佳答案

是的,我认为这里的答案说明了您的问题。只是想稍微澄清一下。

您正在引用一个列表,因此当列表更改时,对该列表的任何引用都将反射(reflect)该更改。演示:

>>> x_present = [4,5,6]
>>>
>>> x_past = x_present
>>>
>>> x_past
[4, 5, 6]
>>>
>>> x_present.append(7)
>>>
>>> x_past
[4, 5, 6, 7]
>>>

如果您想要列表的副本,您必须执行此操作,listcopy = mylist[:]。 (或 import copy;listcopy = copy.copy(mylist)

>>> x_past = x_present[:]
>>> x_past
[4, 5, 6, 7]
>>>
>>> x_present.append(8)
>>>
>>> x_past
[4, 5, 6, 7]

关于Python - 一个变量不应该等于另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com