嵌套列表无法正常工作
Nested list doesn't work properly
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
首先,这是使用朴素高斯消除法求解n个方程根的部分代码。有谁知道为什么会发生这种情况?为什么零部分在变化而其他部分没有?我用 C++ 完成了这段代码,它在那里工作得很好,但在这里我遇到了很多问题。也许我是 python 的新手。我正在使用 python 2.7.......
这一行:
equation=eqn
并不像您认为的那样。试试这个:
import copy
equation=copy.deepcopy(eqn)
Python 赋值不是复制操作,而是绑定操作。您拥有的行表示“将名称 equation
绑定到 eqn
当前绑定到的同一对象。”
您的算法要求 equation
和 eqn
是不同的对象。
我认为问题出在作业 equation = eqn
上。由于 eqn
是一个列表,它是一个可变的,因此作为引用传递,当您分配一个可变的时,该变量实际上包含指向该对象的指针。这意味着 equation
和 eqn
是同一个列表。
你应该
from copy import deepcopy
equation = deepcopy(eqn)
您需要 deepcopy
而不是 copy
因为您有一个列表列表,还需要复制内部列表。
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
首先,这是使用朴素高斯消除法求解n个方程根的部分代码。有谁知道为什么会发生这种情况?为什么零部分在变化而其他部分没有?我用 C++ 完成了这段代码,它在那里工作得很好,但在这里我遇到了很多问题。也许我是 python 的新手。我正在使用 python 2.7.......
这一行:
equation=eqn
并不像您认为的那样。试试这个:
import copy
equation=copy.deepcopy(eqn)
Python 赋值不是复制操作,而是绑定操作。您拥有的行表示“将名称 equation
绑定到 eqn
当前绑定到的同一对象。”
您的算法要求 equation
和 eqn
是不同的对象。
我认为问题出在作业 equation = eqn
上。由于 eqn
是一个列表,它是一个可变的,因此作为引用传递,当您分配一个可变的时,该变量实际上包含指向该对象的指针。这意味着 equation
和 eqn
是同一个列表。
你应该
from copy import deepcopy
equation = deepcopy(eqn)
您需要 deepcopy
而不是 copy
因为您有一个列表列表,还需要复制内部列表。