将值插入多维列表

时间:2017-02-04 18:16:57

标签: python python-3.x algorithm python-2.7

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
>>> 

1 个答案:

答案 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:]]