函数描述
首先来看文档中对这个函数的描述:
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