我试图在不使用numpy的情况下从Python矩阵中获取对角线(我真的不能使用它)。这里有人知道怎么做吗?

我想要得到的例子:

get_diagonal ([[1,2,3,4],[5,6,7,8],[9,10,11,12]], 1, 1, 1)
Result: [1, 6, 11]

或类似:
get_diagonal ([[1,2,3,4],[5,6,7,8],[9,10,11,12]], 1, 2, 1)
Result: [2, 7, 12]

直到我知道我尝试了很多东西,但没有用。
def obter_diagonal(matrix, line, column, direc):
    d = []
    if direc == 1:
        for i in matrix:
            for j in i:
                if all(i == line, j == column):
                    d.extend(matrix[i][j])
    else:
        for i in matrix:
            for j in i:
                d.extend[len(matrix)-1-i][j]
    return d

如果是direc==1,我需要获取从左->右,上->下的对角线。
如果direc==-1需要获取从右->左,上->底的诊断。

最佳答案

为了得到领先的对角线,你可以做

diag = [ mat[i][i] for i in range(len(mat)) ]

甚至
diag = [ row[i] for i,row in enumerate(mat) ]

并为其他对角线玩类似的游戏。例如,对于反对角线(从右上到左下),您可以执行以下操作:
diag = [ row[-i-1] for i,row in enumerate(mat) ]

对于其他次要对角线,您必须在列表理解中使用if条件,例如:
diag = [ row[i+offset] for i,row in enumerate(mat) if 0 <= i+offset < len(row)]

关于python - 在不使用numpy的情况下获得对角线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20447210/

10-12 23:08