我们有:
a = [[1, 2, 4], [-1, 3, 4], [9, -3, 7]]
对角遍历为列表:
[1, -1, 2, 9, 3, 4]
n = int(input())
a = [[0]*n for _ in range(n)]
for i in range(n):
a[i] = [int(j) for j in input().strip().split(" ")]
res = []
for j in range(n):
for k in range(j + 1):
res.append(a[j - k][k])
print(res)
如何获得剩余的两个对角线?
我需要得到:
[-3, 4, 7]
答案 0 :(得分:1)
尝试一下。定义变量COL和ROW,然后对矩阵运行以下函数。
def diagonalOrder(matrix) :
# There will be ROW+COL-1 lines in the output
for line in range(1, (ROW + COL)) :
# Get column index of the first element
# in this line of output. The index is 0
# for first ROW lines and line - ROW for
# remaining lines
start_col = max(0, line - ROW)
# Get count of elements in this line.
# The count of elements is equal to
# minimum of line number, COL-start_col and ROW
count = min(line, (COL - start_col), ROW)
# Print elements of this line
for j in range(0, count) :
print(matrix[min(ROW, line) - j - 1]
[start_col + j], end = "\t")
print()
答案 1 :(得分:0)
首先,查看此3x3矩阵,每个元素的第一行包含其行,第二位数包含其列。
00 01 02
10 11 12
20 21 22
所需元素的顺序为:
00 10 01 20 11 02 21 12 22
或者从其他角度来看:
00
10 01
20 11 02
21 12
22
您可以看到,在上述数字的第一列中,第一位数字是01222
。这代表range(3) + [2, 2]
。现在,查看第一列的第二位数字。它们是00012
,代表[0, 0] + range(3)
。
此外,请注意,在每一行中,每个元素都减小其第一位数,并增大其第二位数,直到该元素等于其逆数为止。您可以在第三行中更清楚地看到它。它从20
开始,到11
,然后终止于02
,它是初始数字20
的倒数。
因此,您可以执行以下操作:
def toNumber(i, j):
return int(str(i) + str(j))
res = []
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
list1 = list(range(3)) + [2]*2
list2 = [0]*2 + list(range(3))
for i, j in zip(list1, list2):
inverse = int(str(toNumber(i, j))[::-1])
while True:
res.append(a[i][j])
if toNumber(i, j) == inverse:
break
i -= 1
j += 1
print(res)