重现正方形矩阵中的对角线列表(简化)

时间:2020-03-10 12:10:02

标签: python-3.x

我想返回对角线,即在给定的矩阵中从左到右,从右到左,我使用列表推导来这样做,但是我上来时,我的眼神是对返回左到右矩阵的复杂理解。

我想知道是否有更简单的方法来编写将对角线从右向左返回的理解?而且,鉴于我是菜鸟,我只是开始学习语言,我想知道right_left理解是否甚至是常规的?

matrix = [[1,2,3],
          [4,5,6],
          [7,8,9]]
left_right = [arr[i][i] 
              for i in range(len(arr))]
right_left = [arr[i][[-j 
              for j in range(-len(arr)+1,1)][i]] 
              for i in range(-len(arr),0)]

3 个答案:

答案 0 :(得分:2)

left_right = [arr[i][-(i+1)] for i in range(len(arr))]

有关否定性标记的解释,请阅读:https://stackoverflow.com/a/11367936/8326775

答案 1 :(得分:0)

您最好了解numpy,它具有内置diagonals的功能

>>> import numpy as np
>>> matrix = np.array([[1,2,3],
                       [4,5,6],
                       [7,8,9]])
>>> np.diag(matrix)
array([1, 5, 9])
>>> np.diag(matrix, k=1)
array([2, 6])
>>> np.diag(matrix, k=-1)
array([4, 8])

答案 2 :(得分:0)

 [list(reversed(matrix[i]))[i] for i in range(len(matrix))]

 # more transparent version:

for i in range(len(matrix)):
    row = list(reversed(matrix[i]))
    el = row[i]
    print("reversed row {} = {} -> extract element {} -> gives {}".format(i, row, i, el))

#reversed row 0 = [3, 2, 1] -> extract element 0 -> gives 3
#reversed row 1 = [6, 5, 4] -> extract element 1 -> gives 5
#reversed row 2 = [9, 8, 7] -> extract element 2 -> gives 7