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开发、数据分析、人工智能和自动化脚本

### 如何在 Python 中打印或输出二维列表Python 中,可以使用多种方法打印二维列表。以下是几种常见的实现方式: #### 方法一:嵌套 `for` 循环 通过嵌套的 `for` 循环遍历二维列表的每一行和每一列元素,并逐个打印。 ```python list06 = [['a', True, 1, 4, 6, 78], [1, 2, 3, 4]] def print_double_list(double_list): for i in double_list: # 遍历外层列表 for j in i: # 遍历内层列表 print(j, end=' ') # 打印每个元素并用空格分隔 print() # 每打印完一行后换行 print_double_list(list06) # 调用函数[^1] ``` #### 方法二:使用列表推导式与字符串连接 如果需要将每一行的元素组合成一个字符串再打印,可以使用列表推导式结合 `join` 方法。 ```python list06 = [['a', True, 1, 4, 6, 78], [1, 2, 3, 4]] def print_double_list(double_list): for row in double_list: print(' '.join(map(str, row))) # 将每行元素转换为字符串并用空格连接 print_double_list(list06) # 调用函数[^3] ``` #### 方法三:反转二维列表后打印 如果需要以特定顺序(如从下到上)打印二维列表,可以先对列表进行反转操作。 ```python arr = [[1, 2, 3, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]] arr.reverse() # 反转列表 for i in arr: for j in i: print(j, end=' ') # 打印每个元素 print() # 每打印完一行后换行[^2] ``` #### 方法四:按列优先顺序打印 如果需要按列优先的顺序打印二维列表,可以通过调整循环的嵌套顺序实现。 ```python arr = [[1, 2, 3], [4, 5, 6]] for j in range(len(arr[0])): # 遍历列索引 for i in range(len(arr)): # 遍历行索引 print(arr[i][j], end=' ') # 打印列元素 print() # 每打印完一列后换行[^2] ``` #### 方法五:格式化输出 如果需要对齐输出,可以使用字符串的格式化方法(如 `rjust` 或 `ljust`)。 ```python tableData = [['apples', 'oranges', 'cherries', 'banana'], ['Alice', 'Bob', 'Carol', 'David'], ['dogs', 'cats', 'moose', 'goose']] def printTable(Data): for i in range(len(Data[0])): for y in range(len(Data)): if y == len(Data) - 1: dot = '\n' # 换行符 else: dot = ' ' # 空格分隔 print(Data[y][i].rjust(8, ' '), end=dot) # 右对齐输出 printTable(tableData) # 调用函数[^4] ``` --- ### 输出示例 以下为上述代码的输出结果: #### 方法一输出: ``` a True 1 4 6 78 1 2 3 4 ``` #### 方法二输出: ``` a True 1 4 6 78 1 2 3 4 ``` #### 方法三输出: ``` 3 4 5 6 7 5 6 7 8 9 1 2 3 4 5 ``` #### 方法四输出: ``` 1 4 2 5 3 6 ``` #### 方法五输出: ``` apples Alice dogs oranges Bob cats cherries Carol moose banana David goose ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值