python实现二维列表(list)的旋转、反转

本文介绍了Python中反转列表的多种方法,包括使用reversed()函数、列表切片、reverse()方法等,并详细解析了一个图像旋转问题的解决思路,通过先反转列表再交换对称元素实现图像的原地旋转。
部署运行你感兴趣的模型镜像

讲在前面的话,在leetcode刷到一道in-place的旋转图像的题,同时在想如果不原位旋转的话,肯定有其他简单的方法的,答案是肯定的。顺便写篇博客来记录一下Python中的反转list的方法。

1.Python中反转list的几种简单方法

1.1 使用reversed()的函数,它是一个生成器,返回一个对象

nums = [1,2,3,4,5]
reversed_nums = list(reversed(nums))
print(reversed_nums)   # [5, 4, 3, 2, 1]

1.2 使用列表中的切片

nums = [1,2,3,4,5]
reversed_nums = nums[::-1]

1.3 使用list的reverse方法(in-place)

nums = [1,2,3,9,4,5,6]
nums.reverse()   #[6, 5, 4, 9, 3, 2, 1]

1.4 二维list类似可以使用以上的方法就不在重复讲了

 

2.旋转图像

给定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],
原地旋转输入矩阵,使其变为:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

解题思路:

先反转list, 然后交换对称

        """
         /*
         * clockwise rotate
         * first reverse up to down, then swap the symmetry 
         * 1 2 3     7 8 9     7 4 1
         * 4 5 6  => 4 5 6  => 8 5 2
         * 7 8 9     1 2 3     9 6 3
        */
        /*
         * anticlockwise rotate
         * first reverse left to right, then swap the symmetry
         * 1 2 3     3 2 1     3 6 9
         * 4 5 6  => 6 5 4  => 2 5 8
         * 7 8 9     9 8 7     1 4 7
        */
        """

2.1 in-place的解法

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        matrix.reverse()
        for i in range(len(matrix)):
            for j in range(i+1, len(matrix[i])):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

2.2 使用一行代码求解,但不是原位操作

original = [
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
]

rotated = list(zip(*original[::-1]))   #[(15, 13, 2, 5), (14, 3, 4, 1), (12, 6, 8, 9), (16, 7, 10, 11)]

 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值