从矩阵打印对角线



这是我需要从以下位置打印对角线的矩阵:

1 2 3
4 5 6
7 8 9

我需要打印 1、5、9 和 3、5、7(分别)

它还应该要求用户输入尺寸

这就是我试图做的:

n = int(input("enter dimension: "))
lst=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(lst)
for i in range(0, n):
for j in range(0, n):
if i == j:
print(lst[i][j])
for i in range(0, n):
for j in range(n-1, 0, -1):
print(lst[i][j])

这个半途而废,因为我确实得到了 1、5 和 9,但没有得到 3、5 和 7。

嗨,你可以为次要对角线执行此操作:(由Mohit Kumar提供)

# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
print("Secondary Diagonal: ", end = "")

for i in range(n):
for j in range(n):

# Condition for secondary diagonal
if ((i + j) == (n - 1)):
print(mat[i][j], end = ", ")
print()

# Driver code
n = 4
a = [[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]]
printSecondaryDiagonal(a, n)

您可以使用list comprehensions将 2 对角线作为 -

  1. 如前所述,由于矩阵是mxm因此您可以通过迭代索引范围一次来简单地迭代对角线,如本例所示(0,0), (1,1), (2,2)
  2. 对于您需要的第二个对角线,您只需reverse索引范围并连同enumerate一起获取对角线元素,如本例所示(0,2), (1,1), (2,0)

上述两种方法都只需要迭代n顺序(其中 n 是对角线的长度)。

a = [[1, 2, 3], 
[4, 5, 6],
[7, 8, 9]]
d1 = [a[i][i] for i in range(len(a))]
d2 = [a[i][j] for i,j in enumerate(reversed(range(len(a))))]
print(d1)
print(d2)
[1 5 9]
[3 5 7]

如果你必须同时打印这两个,你可以简单地通过在矩阵上进行一次迭代来做到这一点(顺序n) -

d1 = []
d2 = []
for i,j in enumerate(reversed(range(len(a)))):
d1.append(a[i][i])
d2.append(a[i][j])

print(d1)
print(d2)
[1 5 9]
[3 5 7]

但是,如果您愿意使用NumPy,您可以使用np.diag轻松执行此操作,因为 -

import numpy as np
d1 = np.array(a).diagonal()
d2 = np.fliplr(a).diagonal()
print(d1)
print(d2)
[1 5 9]
[3 5 7]
lst=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
diag1 = []
diag2 = []
for col, row in enumerate(lst):
diag1.append(row[col])
diag2.append(row[-col-1])

print(diag1)
print(diag2)
<小时 />

输出:

[1, 5, 9]
[3, 5, 7]

解释:

enumerate()函数将从您的列表中创建一些东西作为对列表:

[(0, [1, 2, 3]),
(1, [4, 5, 6]),
(2, [7, 8, 9])]

一对的第一项只是您要选择的元素的索引(我将其分配给变量col):

  • 元素的索引0来自行[1, 2, 3],即元素1
  • 元素的索引1来自行[4, 5, 6],即元素5
  • 元素的索引2来自行[7, 8, 9],即元素9

对于第二个对角线,您要选择从末端开始计数的元素。对于从末尾开始的索引,请使用负数(-1是最后一个元素,-2只是最后一个元素,等等),即您要选择:

  • 元素的索引-1来自行[1, 2, 3],即元素3
  • 元素的索引-2来自行[4, 5, 6],即元素5
  • 元素的索引-3来自行[7, 8, 9],即元素7

为了从原始索引 0、1 和 2(依次分配给for循环中的变量col)获取这些索引,我使用了表达式-col-1

| col | (-col-1) |result|
|-----+----------+------|
|  0  |  -0 - 1  |  -1  |
|  1  |  -1 - 1  |  -2  |
|  2  |  -2 - 1  |  -3  |

最新更新