每日学习总结

1、通过一道题目,学会怎么使用zip(*),[::-1]
zip()函数用于将可迭代的对象作为参数,将对象中的对应元素打包成一个个元祖,然后返回由这些元祖组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用号操作符,可将元祖解压为列表。
注意:python3中为了减少内存,zip()返回的是一个对象。如果需要展示里诶博爱,需要手动list()转换。
强化理解:
zip()相当于对几个迭代器取第一个元素,然后生成新的元祖作为第一行,
zip(
)相当于拆解一个迭代器。比如说将一个3*3矩阵,取第一列作为一个新的元祖,第二列作为第二个新的元祖…
以leetcode上面的一道题为例:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        # 这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个         元素应用list()函数,将tuple转换为list
        res = []
        while matrix:
            res += matrix.pop(0)  # 将矩阵的第一行删掉,存放到res中
            # matrix = list(zip(*matrix))[::-1]  # 利用zip和*进行行列转换,外面是列表,里面是元祖
            matrix = list(map(list, zip(*matrix)))[::-1]  # 外面是列表,里面也是列表
        return res

注意:
(1)zip(matrix)相当于将一个矩阵沿着主对角线做对称交换。
(2)[::-1]相当于按行做倒序,因为matrix是一个3
3矩阵,就相当于按照行做倒序。即[[1,2,3],[4,5,6],[7,8,9]]变成[[7, 8, 9], [4, 5, 6], [1, 2, 3]]。
(3)将上面两个操作合并相当于进行逆时针旋转90°。
延伸:
顺时针旋转:
(1)先进行一个[::-1]做一个反转。
(2)然后使用zip(*matrix)相当于将一个矩阵沿着主对角线做对称交换。
(3)将上面两个操作合并相当于进行顺时针旋转90°。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值