提取2D列表的反对角线

时间:2019-04-06 08:12:12

标签: python list

我正在尝试打印此矩阵的对角线数字,以便得到[5, 9, 13, 17, 21]

我尝试更改for循环中的变量。

matrix = [[ 1,  2,  3,  4,  5],
          [ 6,  7,  8,  9, 10],
          [11, 12, 13, 14, 15],
          [16, 17, 18, 19, 20],
          [21, 22, 23, 24, 25]]

diagonal = []
last_column = len(matrix[0]) - 1
for row in matrix:
    diagonal.append([row][0][4])

print(diagonal)

我得到[5, 10, 15, 20, 25],而不是得到对角线数字。

2 个答案:

答案 0 :(得分:3)

您需要反对角线,因此可以使用简单的列表理解(假设matrix是正方形的)。

[matrix[i][-(i+1)] for i in range(len(matrix))]
# [5, 9, 13, 17, 21]

答案 1 :(得分:3)

您也可以使用numpy.diagonal

import numpy
matrix = [[ 1,  2,  3,  4,  5],
          [ 6,  7,  8,  9, 10],
          [11, 12, 13, 14, 15],
          [16, 17, 18, 19, 20],
          [21, 22, 23, 24, 25]]
arr=numpy.array(matrix)
print(numpy.fliplr(arr).diagonal())

输出:

[ 5  9 13 17 21]

要获取对角线,请使用print(arr.diagonal())