Python - zip 函数

函数描述

首先来看文档中对这个函数的描述:

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

明确函数的作用对象是可迭代对象,输出结果是一个对象(一般我们会转化成列表再做使用)

使用实例

简单来说,函数的作用就是将不同对象的对应元素打包成元组,然后把这些元组再组成对象返回,例如:

In [1]: a = [1,2,3]
In [2]: b = [4,5,6]
In [3]: c = zip(a ,b)
In [4]: c
Out[4]: <zip at 0x1d2b6d69248>    #返回对象
In [5]: c = list(c)
In [6]: c
Out[6]: [(1, 4), (2, 5), (3, 6)]

观察结果可以得知,zip函数将分别取出a,b列表的元素,然后打包成元组:(1,4), (2,5)…然后将这些元组组成对象返回,我们通过list()转化为列表就可以拿到这个元组的列表。

另一种情况,如果两个迭代对象的维数不一样如何呢?结果会是与最短的维数一致,例如:

In [7]: a = [1,2,3]    #3元素
In [8]: b = [4,5,6,7]  #4元素
In [9]: c = list(zip(a, b))
In [10]: c
Out[10]: [(1, 4), (2, 5), (3, 6)]    #结果舍弃了高维的元素

同理,对于多个迭代对象也是一样:

In [1]: a = [1,2,3]
In [2]: b = [4,5,6]
In [3]: c = [7,8,9]
In [4]: list(zip(a,b,c))
Out[4]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

关于zip函数还有一个重要的使用是 * 操作符,来完成这个“打包”过程的逆过程,也就是“解压”:

In [1]: a = [1,2,3]
In [2]: b = [4,5,6]
In [3]: r1,r2 = zip(*zip(a, b))   #执行“解压”
In [4]: r1
Out[4]: (1, 2, 3)
In [5]: r2
Out[5]: (4, 5, 6)       #只是结果变成了元组

利用这个特点,我们有一个小应用:求解转置矩阵(当然,转置矩阵在python的一些科学计算包里很容易实现):

In [1]: a = [[1,2,3], [4,5,6],[7,8,9]]

In [2]: a
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [3]: a = list(zip(*a))         #将a看作是zip作用之后的结果

In [4]: a
Out[4]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

In [5]: a = [list(row) for row in a]    #列表解析将列表中的每个元组转化为列表

In [6]: a
Out[6]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

以上~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值