这是我需要从以下位置打印对角线的矩阵:
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 对角线作为 -
- 如前所述,由于矩阵是
mxm
因此您可以通过迭代索引范围一次来简单地迭代对角线,如本例所示(0,0), (1,1), (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 |