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、具体应用

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:
在这里插入图片描述

输入: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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解代码

res=[]
while len(matrix)>0:
	res.extend(matrix.pop(0)) # 选取第一行
	matrix=list(zip(*matrix))[::-1] # 逆时针旋转90度
return res
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值