Python – zip 函数

导读:本篇文章讲解 Python – zip 函数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

函数描述

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

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]]

以上~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116774.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!