2024-12-26-Python中zipzipzippedzip函数总结
Python中zip()、zip(*zipped)、*zip()函数总结
前言:本博文主要讲解Python中zip()、zip(*zipped)、*zip()的用法及区别。
文章目录
一、zip()函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用
*
号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换;如需展示字典,需手动 dict() 转换。
1.1、语法
zip([iterable, ...])
参数说明:iterable(一个或多个迭代器)
1.2、返回值
- 返回元祖列表
1.3、实例
# 定义三个列表
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
# 打包为元组的列表,而且元素个数与最短的列表一致
a_b = zip(a, b)
# 输出zip函数的返回对象类型
print("a_b类型%s" % type(a_b))
# 输出a_b
print(a_b)
首先我们定义三个列表,并为a,b列表使用zip()函数,我们简单的看一下结果:
通过上面的运行结果,我们可以看出:zip函数的返回对象类型是一个zip类型,我们直接来输出a_b的结果,返回了这个zip对象在内存中的存储位置。那么下来,我们用list()对其进行一个转换:
print(list(a_b))
可以看出,它返回了由这些元组组成的列表。
注意:zip()函数的返回对象转换成list不是必须的,只是为了方便输出,list输出很直观。
那么下来,我们测试下当迭代器的元素个数不一致时,是如何进行操作的。
a_c = zip(a, c)
print(list(a_c))
通过这个执行结果,我们可以清晰的看到:如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
二、zip(*zipped)
zip(*zipped)中的 *zipped参数,可以list数组,也可以是zip()函数返回的对象。
# 声明一个列表
nums = [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3']]
# 参数为list数组时,是压缩数据,相当于zip()函数
iters = zip(*nums)
# 输出zip(*zipped)函数返回对象的类型
print("type of iters is %s" % type(iters))
# 因为zip(*zipped)函数返回一个zip类型对象,所以我们需要对其进行转换
# 在这里,我们将其转换为字典
print(dict(iters))
注意:该dict()函数可用于将zip对象转换为字典。需要注意的是,只能使用两个zip()参数,前者产生key,后者产生value。
三、*zip()函数
*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。
# 创建2个列表
m = [1, 2, 3]
n = [4, 5, 6]
print("*zip(m, n)返回:", *zip(m, n))
m2, n2 = zip(*zip(m, n))
print("m2和n2的值分别为:", m2, n2)
# 若相等,返回True;说明*zip为zip的逆过程
print(m == list(m2) and n == list(n2))
68747470733a2f2f62:6c6f672e6373646e2e6e65742f71715f34343033343338342f:61727469636c652f64657461696c732f313037333032313833