Python小技巧之zip函数详解

本文主要介绍Python中zip函数的相关知识。zip函数可将可迭代对象对应元素打包成元组,返回zip对象,能节约内存。文中阐述了其用法,包括不同参数情况,还介绍了在列表转字典、矩阵操作等方面的实际应用,以及解压和逆过程操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、zip函数的作用

二、用法

三、实际应用

四、解压 zip(*iterables)

五、*zip( )


一、zip函数的作用

        zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象。(请注意:Python3中返回的是zip对象,python2 中返回的是这些元组组成的列表)

        使用zip()函数打包的好处是节约了不少的内存。

import sys

empty = []
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, 10, 11, 12, 13]

print(sys.getsizeof(empty))  # 56字节
print(sys.getsizeof(a))  # 88字节
print(sys.getsizeof(b))  # 88字节
print(sys.getsizeof(c))  # 120字节

ab1 = a + b
print(sys.getsizeof(ab1))  # 104字节
ab2 = zip(a, b)
print(sys.getsizeof(ab2))  # 64字节

二、用法

        zip()函数的语法格式: zip(iterables……)

        1.只有一个参数的情况

a = [1,2,3]
a1 = zip(a)
a2 = list(zip(a))
print(a1, a2, sep="\n")

# 输出
# <zip object at 0x10bc3c940>
# [(1,), (2,), (3,)]

        2.两个或多个参数的情况

a = [1,2,3]
b = [4,5,6]
ab1=zip(a ,b)
ab2 = list(zip(a, b))
print(ab1, ab2, sep="\n")

# 输出
# <zip object at 0x105184940>
# [(1, 4), (2, 5), (3, 6)]

        3.参数长度不同的情况

a = [1,2]
b = [4,5,6]
ab1=zip(a ,b)
ab2 = list(zip(a, b))
print(ab1, ab2, sep="\n")

# 输出
# <zip object at 0x10a590c40>
# [(1, 4), (2, 5)]

三、实际应用

        1.将两个列表转换成字典

a = [1,2,3]
b = [4,5,6]
ab = dict(zip(a, b))
print(ab)

# 输出
# {1: 4, 2: 5, 3: 6}

        2.用于实现矩阵的加减、点乘、转置等操作

m=[[1,1],[4,5]]
n=[[1,2],[2,3]]
for a,b in zip(m,n):
   	for x,y in zip(a,b):
   		print(x+y)
# 矩阵相加!同样根据矩阵其他的运算规则用zip可以实现更多矩阵的操作

# 输出
# 2
# 4
# 6
# 8

四、解压 zip(*iterables)

        zip(*iterables)中的 *iterables参数,可以list数组,也可以是zip()函数返回的对象。

a = [1,2,3]
b = [4,5,6]
ab = zip(a, b)
print('解压前', list(ab), sep="\n")
ab = zip(a, b) # 重新压缩
print('解压后', list(zip(*ab)), sep="\n")

# 输出
# 解压前
# [(1, 4), (2, 5), (3, 6)]
# 解压后
# [(1, 2, 3), (4, 5, 6)]

        如上示例,可以看到经过解压之后,恢复了两个列表最初的元素,只是类型不同了,如果需要可以再进行类型转化。

        值得注意的是,如上示例多写了一行 ‘重新压缩’,这是因为zip返回的对象是一个迭代器,第一次使用完,第二次会变成空列表,这个需要特别注意!

a = [1,2,3]
b = [4,5,6]
ab = zip(a, b)
print('解压前', list(ab), sep="\n")
# ab = zip(a, b) # 重新压缩
print('解压后', list(zip(*ab)), sep="\n")

# 输出
# 解压前
# [(1, 4), (2, 5), (3, 6)]
# 解压后
# []

五、*zip( )

        *zip()是zip()的逆过程,将zip对象变成原先组合前的数据。

a=[[1,2,3],[4,5,6],[7,8,9]]
print(list(zip(*a)))

# 输出
# [(1,4,7),(2,5,8),(3,6,9)]   #实现了矩阵转置的功能,但由于返回列表的元素是元组,要进一步转换

print(list(map(list,zip(*a))))

# 输出
#[[1,4,7],[2,5,8],[3,6,9]]    #元组转换为列表

#----------------
a=[1,4,7]
b=[2,5,8]
c=[3,6,9]
print(list(zip(*zip(a,b,c))))

# 输出
# [(1,4,7),(2,5,8),(3,6,9)]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值