前言:本博文主要讲解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))

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐