Python zip*用法(一行代码实现矩阵的旋转)
1、ZIP函数
ZIP函数是Python中的一个内置函数,在Python 2.X的版本中返回的是一个列表,Python 3.X版本中返回的是一个zip迭代器对象。
ZIP函数的具体用法
a = [1,2,3]
b = [4,5,6]
for x,y in zip(a,b):
print(x,y)
预计的返回结果
1 4
2 5
3 6
很显然,ZIP函数是将两个容器内的数据进行组合。
list(zip([1,2,3],[4,5,6]))
返回结果为
[(1, 4), (2, 5), (3, 6)]
zip中的两个对象,可以都是列表,也可以是一个列表一个集合,还可以是一个列表一个字符串
list(zip([1,2,3,4],'def'))
返回结果为
[(1, 'd'), (2, 'e'), (3, 'f')]
可以看到当两个容器的长度不一样的时候,zip函数还可以进行自动剪裁。
2、ZIP*实现矩阵旋转
当矩阵是二维的时候,zip函数也有自己的用途,那就是实现选择二维矩阵的某一列或者直接对其旋转
旋转二维矩阵,简单的方法是将二维列表使用 numpy 转换成array对象,然后使用 numpy 自带的旋转函数。
import numpy as np
res = []
matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix=np.array(matrix)
matrix=np.rot90(matrix,1)
print(matrix)
返回结果为
[[3,6,9],[2,5,8],[1,4,7]]
可以看到矩阵进行了逆时针的旋转
更简单的,可以直接使用ZIP*一行搞定
matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix= list(zip(*matrix))[::-1]
print(matrix)
返回结果与使用库函数是一样的
注意:这里的*是必不可少的
3、具体应用
Leetcode上旋转图像和旋转矩阵的题基本上都可以用这个方法
比如Leetcode54 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:大连专业人流医院 http://www.dlrlyy.net/
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
题解代码
res=[]
while len(matrix)>0:
res.extend(matrix.pop(0)) # 选取第一行
matrix=list(zip(*matrix))[::-1] # 逆时针旋转90度
return res
- 点赞
- 收藏
- 关注作者
评论(0)