def rm_l_c(n,c,a,AC): #function to remove line and column
for i in range(0,n-1): #row loop
for j in range(0,n-1): #colum
k = j+1
if (j<c):k=j; #the first element in index 0,0
AC[i][j]=a[i+1][k] #The error is here
a=[[1,2,3],[4,5,6],[7,8,9]]
detA=0
AC=[]
def det(a,n):
if(n==2):
detA=a[0][0]*a[1][1]-a[0][1]*a[1][0]
else:
for c in range(0,n):
rm_l_c(n,c,a,AC)
n = n-1
detA=detA+((-1)**c)*a[0][c]*det(AC,n)
return detA
det(a,3)
此代码是使用拉普拉斯扩展的行列式的实现
https://en.wikipedia.org/wiki/Laplace_expansion
问题出在AC[i][j]=a[i+1][k]
我不知道如何插入
当我尝试运行它时也会出现此错误
Traceback (most recent call last):
File "C:\Users\zerocool\Desktop\det.py", line 22, in <module>
det(a,3)
File "C:\Users\zerocool\Desktop\det.py", line 17, in det
rm_l_c(n,c,a,AC)
File "C:\Users\zerocool\Desktop\det.py", line 6, in rm_l_c
AC[i][j]=a[i+1][k]
IndexError: list index out of range
>>>
答案 0 :(得分:1)
正如juanpa.arrivillaga所提到的,你无法将元素插入到空列表中。 由于您只是在rm_l_c中修改AC,因此您可以通过执行以下操作,每次使用null元素(或您想要默认的任何其他元素)以正确的大小运行rm_l_c时创建它。
def rm_l_c(c,a): #function to remove line and column
n = len(a)
AC = [[None]*(n-1) for i in range(n-1)]
for i in range(0,n-1): #row loop
for j in range(0,n-1): #column
k = j+1
if (j<c):k=j; #the first element in index 0,0
AC[i][j]=a[i+1][k] #Insert now happens correctly
return AC
您也可以使用列表推导来获得rm_l_c的相同最终结果,列表推导更加pythonic且更容易阅读。
def rm_l_c(c,a):
return [b[:c]+b[c+1:] for b in a[1:]]