当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Python-一个变量等于另一个变量,它不应该》经验,为你挑选了1个好方法。

这是我的示例代码.它是高斯塞德尔(矩阵求解器)的迭代过程.基本上当错误足够小时,它会突破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很长时间,所以我的麻烦射击技巧语法明智不是那么好.任何帮助,将不胜感激!!



1> monkut..:

是的,我认为这里的答案显示了你的问题.只是为了尝试澄清一点点.

您正在引用列表,因此当列表更改时,对该列表的任何引用都将反映该更改.展示:

>>> 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 [:].

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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有