题目描述如下:
这个题目的要求差不多就是将矩阵按照对角线输出,不足的部分用0补齐,主要的难点就是对矩阵的对角线输出。
首先我们以3阶为例,为了清晰,下面将A[0][0]记为(0,0),那么最后的B矩阵就是[ [(0,0),0,0] , [(1,0),(0,1),0]] , [(2,0),(1,1),(0,2)] , [(2,1),(1,2),0] , [(2,2),0,0] ].我们把其中的非0项提出来看一下:
(0,0)
(1,0),(0,1)
(2,0),(1,1),(0,2)
(2,1),(1,2)
(2,2)
我们把上面的括号内左边记为i,右边记为j,即(i,j).先观察前三行(以三阶为例,m阶就是m行),每列开头的i依次由0增加到2(即m-1),而j保持0不变,同时观察每一行发现每行的i都从左往右依次-1直到i == 0,j从左往右依次+1一直到该行i的初始值(第一行0,第二行1,第三行2).同时当处理完开头为(2,0)的行后,需要将后续行的i固定为2(即m-1),则有了以下代码:
def func4(lst:list):
lst_result = []
m = len(lst)
start = 0
for j in range(m):
for i in range(start,m):
lst1 = []
i1,j1 = i,j
while i1>=0 and j1<=i:
lst1.append(lst[i1][j1])
i1 -= 1
j1 += 1
while len(lst1) != m:
lst1.append(0)
lst_result.append(lst1)
#当进行到(lst[m-i][0],0)开头时,固定i为m-1
if i == m-1 and j == 0:
start = m-1
return lst_result
有了这个矩阵对角线输出的例子(从下到上,从左往右),上下左右任意组合顺序对矩阵进行对角线输出都是同理,只需先列出相应的项,找到他们之间的规律,对代码进行稍加修改就能实现所需要的功能。