提取2D列表的反对角线。

4

我正在尝试打印这个矩阵的对角线数字,以便我得到[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]


1
这是什么?for row in range(0,len(matrix)): print(matrix[row][len(matrix)-1-row]) - Justice_Lords
2个回答

4

您还可以使用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())

1
只有在矩阵非常大的情况下,我才会使用numpy。在我的程序中,我注意到与其他替代方案相比,numpy可能非常慢。使用分析来确定什么是适当的。 - Jupiter

3

您想要反对角线,因此您可以使用简单的列表推导(假设 matrix 是方阵)。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接