【问题标题】:Nested list doesn't work properly嵌套列表无法正常工作
【发布时间】:2015-07-16 18:27:10
【问题描述】:
import re
def get_number(element):
    re_number = re.match("(\d+\.?\d*)", element)

    if re_number:
        return float(re_number.group(1))
    else:
        return 1.0

def getvalues(equation):
    elements = re.findall("([a-z0-9.]+)", equation)
    return [get_number(element) for element in elements]


eqn = []
eqn_no = int(raw_input("Enter the number of equations: "))

for i in range(eqn_no):
    eqn.append(getvalues(str(raw_input("Enter Equation %d: " % (i+1)))))
print "Main Matrix: "
for i in range((eqn_no)):
    for j in range((eqn_no+1)):
        print "\t%f" %(eqn[i][j]),
    print
print
equation=[]
equation=eqn
for k in range((eqn_no-1)):
    for i in range((k+1),eqn_no):
        for j in range((eqn_no+1)):
            if(eqn[i][j]!=0):
                eqn[i][j]=eqn[i][j]-(eqn[k][j]*(equation[i][k]/eqn[k][k]))



    print "Matrix After %d step: " %(k+1)
    for i in range(eqn_no):
            for j in range((eqn_no+1)):
                print "\t%f"%(eqn[i][j]),
                equation[i][j]=eqn[i][j];

            print
    print

输入:

25x+5y+z=106.8
64x+8y+z=177.2
144x+12y+z=279.2

输出是:

Main Matrix: 
    25.000000   5.000000    1.000000    106.800000
    64.000000   8.000000    1.000000    177.200000
    144.000000  12.000000   1.000000    279.200000

Matrix After 1 step: 
    25.000000   5.000000    1.000000    106.800000
    0.000000    8.000000    1.000000    177.200000
    0.000000    12.000000   1.000000    279.200000

Matrix After 2 step: 
    25.000000   5.000000    1.000000    106.800000
    0.000000    8.000000    1.000000    177.200000
    0.000000    0.000000    1.000000    279.200000

但应该是这样的

Main Matrix: 
    25.000000   5.000000    1.000000    106.800000
    64.000000   8.000000    1.000000    177.200000
    144.000000  12.000000   1.000000    279.200000

Matrix After 1 step: 
    25.000000   5.000000    1.000000    106.800000
    0.000000    -4.80000    -1.56000    -96.208000
    0.000000    -16.8000    -4.76000    -335.968000

Matrix After 2 step: 
    25.000000   5.000000    1.000000    106.800000
    0.000000    -4.80000    -1.56000    -96.208000
    0.000000    0.000000    0.699999    0.759981

首先,这是使用 Naive Guass 消除法求解 n 个方程的根的部分代码。有谁知道为什么会发生这种情况?为什么零部分正在改变而其他部分没有?我已经用 c++ 完成了这段代码,它在那里完美地工作,但在这里我面临很多问题。也许我是python的新手。我正在使用 python 2.7.....

【问题讨论】:

  • 这应该做什么?用简单的英语...
  • 我很难理解这个程序的逻辑。目的是什么?
  • 啊,它的线性代数我想现在我开始理解它了
  • 为什么反复用双括号调用range?

标签: python input nested-lists


【解决方案1】:

我认为问题在于分配equation = eqn。由于eqn 是一个列表,它是一个可变的,因此作为引用传递,当您分配一个可变的,该变量实际上包含一个指向该对象的指针。这意味着equation 和eqn 是同一个列表。

你应该

from copy import deepcopy
equation = deepcopy(eqn)

您需要deepcopy 而不是copy,因为您有一个列表列表,还需要复制内部列表。

【讨论】:

  • 我会有一个矩阵迭代列表并将每个迭代附加到该列表中,因此我们不必让多个对象持有迭代。迭代列表 = list() 然后迭代列表.append(eqn)
  • 您的块“从复制导入 deepcopy equation = deepcopy(eqn)”不起作用。它得到语法错误。请编辑此块。我正在使用 python 2.7 ....
  • @AhashanAlamSojib 它确实有效,你写在一行吗?
  • 不,@Oberix 。我正在提供此代码的 ideone 链接。你自己看。 ideone.com/eQjHFe
  • @AhashanAlamSojib 好的,我知道了:要么你 import copy; equation = copy.deepcopy(eqn) 要么 from copy import deepcopy; equation = deepcopy(eqn)
【解决方案2】:

这一行:

equation=eqn

没有做你认为它做的事。试试这个:

import copy
equation=copy.deepcopy(eqn)

Python 赋值不是复制操作,而是绑定操作。您的行的意思是“将名称 equation 绑定到 eqn 当前绑定的同一个对象。”

您的算法要求 equation 和 eqn 是不同的对象。

【讨论】:

  • 您的块“import copy equation=copy.deepcopy(eqn)”不起作用。它得到语法错误。请编辑此块。我正在使用 python 2.7 ....
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 2018-02-09
  • 2021-02-20
  • 2019-01-07
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多