• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python 实现矩阵按对角线打印

python 搞代码 4年前 (2022-01-07) 18次浏览 已收录 0个评论

今天小编就为大家分享一篇python 实现矩阵按对角线打印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

 Description: 将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题) Example: Input: [ [1,2,3,4], [5,1,2,3], [9,5,1,2] ] Output: [[4], [3, 3], [2, 2, 2], [1, 1, 1], [5, 5], [9]] 

思路: 考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j从col-1开始遍历,首先考虑j的变化,若j变为0,则保持不变,让i变化。在确定开头元素后,可通过设置i+1,j+1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

 (0,3) (0,2) (0,1) (0,0) (1,0) (2,0)

其中各lst中的元素index分别为:

 [(0,3)] [(0,2),(1,3)] [(0,1),(1,2),(2,3)] [(0,0),(1,1),(2,2)] [(1,0),(2,1)] [(2,0)]

代码:

 def di<i style="color:transparent">来源gaodai$ma#com搞$代*码网</i>agonal_right(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) col2 = col result = [] for i in range(row): for j in range(col2 - 1, -1, -1): #j倒序遍历 lst = [] i1,j1 = i,j #i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择 while i1 <= row - 1 and j1 <= col - 1: lst.append(matrix[i1][j1]) j1 += 1 i1 += 1 result.append(lst) if i == 0 and j == 0:#当遍历完(0,0)开头的一条对角线后,让j固定为0 col2 = 1 return('the result is: %s'%result,'end') #test print(diagonal_right([[1],[2]])) print(diagonal_right([[1]])) print(diagonal_right([ [1,2,3,4], [5,1,2,3], [9,5,1,2] ])) 

输出:

变型: 由(0,0)开始向左打印:

思路: 同样考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j也从0开始遍历,首先考虑j的变化,若j变为col-1,则保持不变,让i变化。在找到开头元素后,可通过设置i+1,j-1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

 (0,0) (0,1) (0,2) (0,3) (1,3) (2,3)

其中各lst中的元素index分别为:

 [(0,0)] [(0,1),(1,0)] [(0,2),(1,1),(2,0)] [(0,3),(1,2),(2,1)] [(1,3),(2,2)] [(2,3)]

代码:

 def diagonal_left(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) k=0 result = [] for i in range(row): for j in range(k,col): # j顺序遍历 lst = [] i1, j1 = i, j # i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择 while i1 =0: lst.append(matrix[i1][j1]) j1 -= 1 i1 += 1 if i==0 and j==col-1: k=col-1 result.append(lst) return ('the result is: %s' % result, 'end') # test print(diagonal_left([[1],[2]])) print(diagonal_left([[1]])) print(diagonal_left([ [1,2,3,4], [5,1,2,3], [9,5,1,2] ])) 

输出:

此问题还可以有多种变型,若从左下角,右下角按对角线打印等,只需要进行简单的修改即可实现。

以上这篇python 实现矩阵按对角线打印就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是python 实现矩阵按对角线打印的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python 实现矩阵按对角线打印

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址