python 实现矩阵按对角线打印

作者:iamaline 时间:2022-08-01 02:01:07 

如下所示:


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 diagonal_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]
]))

输出:

python 实现矩阵按对角线打印

变型: 由(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 <= row - 1 and j1 >=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 实现矩阵按对角线打印

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

来源:https://blog.csdn.net/sinat_30324577/article/details/82765836

标签:python,矩阵,对角线,打印
0
投稿

猜你喜欢

  • asp如何用JMail同时给多人发信?

    2010-06-12 12:52:00
  • 使用php get_headers 判断URL是否有效的解决办法

    2023-11-24 00:02:50
  • python 利用百度API进行淘宝评论关键词提取

    2021-11-14 19:32:36
  • python中的class_static的@classmethod的巧妙用法

    2022-07-18 15:54:43
  • 不用加载Include文件也能生成选择列表吗?

    2009-10-29 12:30:00
  • css清除浮动的最优方法

    2008-04-25 22:33:00
  • 基于ASP的站内多值搜索

    2010-05-11 20:03:00
  • 总结Python编程中三条常用的技巧

    2022-06-04 05:52:04
  • 网页设计配色色相之黄金分割

    2007-12-27 21:30:00
  • 泛域名设置问题

    2008-03-25 10:03:00
  • 如何实现SQL Server 2005快速Web分页

    2009-01-21 14:51:00
  • 详解Python with/as使用说明

    2022-10-29 08:01:26
  • asp 读取文件和保存文件函数代码

    2011-04-04 11:17:00
  • ASP中模拟PHP的关联数组

    2009-12-25 16:31:00
  • 详解MySQL数据库中Show命令的用法

    2008-11-27 16:04:00
  • 轻松解决:mysql数据库连接过多的错误

    2010-09-30 14:28:00
  • asp是什么格式 asp文件用什么打开

    2020-06-30 16:04:48
  • javascript分页代码实例分享(js分页)

    2023-10-11 10:00:57
  • PHP7正式版测试,性能惊艳!

    2023-09-12 07:41:43
  • 解读iPhone平台的一些优秀设计思路

    2010-06-24 21:53:00
  • asp之家 网络编程 m.aspxhome.com