码迷,mamicode.com
首页 > 其他好文 > 详细

灵活操作多维矩阵

时间:2017-05-24 21:09:50      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:简单   打印   如何   war   灵活   顺时针   pop   https   .com   

今天这一题是“贪吃蛇”:

给定一个NxN矩阵,从[0][0]开始沿顺时针方向遍历所有元素。如:

1 2 3

8 9 4

7 6 5

这样一个矩阵,最终的遍历打印输出为 1 2 3 4 5 6 7 8 9。

如何做到呢?

这个遍历其实是不断打印某个矩阵的四条边。老老实实的研究出各条边的起止index规律然后打印出来诚然可以,但是还有一个更简单的方法:

继续观察:

1. 打印第一条边 1 2 3,实际上是原始矩阵的第一行。

 

2. 接下来打印的第二条边 4 5, 是矩阵:

4 5

9 6

8 7

的第一行。而这个矩阵,是去掉第一条边后剩下的矩阵:

8 9 4

7 6 5

的转置矩阵的按行倒序。

 

3. 第三条边 6 7,是矩阵:

6 7

9 8

的第一行。这个矩阵,又是去掉第二条边后剩下的矩阵:

9 6

8 7

的转置矩阵的按行倒序。

 

4. 依次类推…

实现要点:

1. 去掉多维矩阵的第一行:

用list.pop()。

2. 矩阵的转置:

用zip(*原矩阵)。

3. 矩阵的按行倒序:

用list.reverse()。

相应的代码为:

def snail(array):
    a = []
    while array:
        a.extend(list(array.pop(0)))
        array = zip(*array)
        array.reverse()
    return a

zip和list真是矩阵处理的好帮手。

灵活操作多维矩阵

标签:简单   打印   如何   war   灵活   顺时针   pop   https   .com   

原文地址:http://www.cnblogs.com/netoops/p/6900747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!