Python zip*用法(一行代码实现矩阵的旋转)

举报
nineteens 发表于 2021/03/17 17:03:57 2021/03/17
【摘要】 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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。