每日kata~07~Snail

题目

Snail Sort
Given an n x n array, return the array elements arranged from outermost elements to the middle element, traveling clockwise.

array = [[1,2,3],
[4,5,6],
[7,8,9]]
snail(array) #=> [1,2,3,6,9,8,7,4,5]
For better understanding, please follow the numbers of the next array consecutively:

array = [[1,2,3],
[8,9,4],
[7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]

我的笨蛋解法

def snail(snail_map):
    if len(snail_map[0]):
        res = []
        print(snail)
        length = len(snail_map)
        n = length//2
        for i in range(0,n):
            for j in range(i,length-i):
                res.append(snail_map[i][j])
            for j in range(i+1,length-i):
                res.append(snail_map[j][length-i-1])
            for j in range(i+1,length-i):
                res.append(snail_map[length-i-1][length-j-1])
            for j in range(i+1,length-i-1):
                res.append(snail_map[length-j-1][i])
        if length%2:
            res.append(snail_map[n][n])

    else:
        res = []

    return res

大神的解法

<e.g>
将矩阵逆时针旋转90度,取第一行即是蛇形遍历的顺序,大神妙啊!

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

知识点

lt.append() vs lt.extend()

append()方法是将对象整体加到list尾部
extend()方法是将可迭代对象中的每一个元素逐个加到list中
所以说,extend的对象必须是可迭代对象

zip()

参数为可迭代对象,将对象中对应的元素打包成一个元组返回
各对象长度不一致时,取最短的对象的长度

lt.pop(0)

弹出最早放入列表的元素

2个参数的for循环—使用zip方法

for (i,j) in zip(range(0,2),range(0,3))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容