当前位置:   article > 正文

每日学习总结_学习各科每日总结

学习各科每日总结

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:
(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°。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/261580
推荐阅读
相关标签
  

闽ICP备14008679号