【Python】内置函数zip的使用方法超详细介绍|编程基础

本文介绍了Python的zip函数,包括如何打包单一参数的列表,如何节省内存通过打包多个迭代器,以及如何处理嵌套列表。还讨论了zip*()函数的解压功能,并展示了如何使用zip实现矩阵的行列互换。文中强调了Python2与Python3中zip函数返回值的区别。
摘要由CSDN通过智能技术生成

这里是Sapphire_CDD,这是本人的第一篇博客

参考了CSDN上的一些文章,都没有发现将zip函数的各类使用方法总结起来的博客,所以做了个总结,如有问题请在评论区指正,如果对你有帮助,欢迎点一个赞~

# zip([iterable, …]) 参数为一个或多个迭代器

# 0. 只有一个参数的时候,将列表打包成元组
# 在python2中zip函数返回元组,但在python3中zip函数返回该方法的地址,所以需要类型转换
lst0 = [1, 3, 4]
print(tuple(zip(lst0)))
print(list(zip(lst0)))
print()

# 1. zip()函数将可迭代对象打包,节约内存
# 2. zip()函数把多个迭代对象中同地位的数据以元组的形式放在同一块存储空间,多余的会被舍弃
import sys
lst = []
a = [1, 2, 3]
b = [4, 5, 6, 7, 8]
print("lst所占字节为:", sys.getsizeof(lst))
print("a所占字节为:", sys.getsizeof(a))
print("b所占字节为:", sys.getsizeof(b))
lst1 = a + b
print("普通的列表a+b所占字节为:", sys.getsizeof(lst1))
print("a+b:", lst1)
lst2 = list(zip(a, b))  # 注意,python2中zip函数的返回值是列表,python3中是这个函数的地址
print("用zip函数打包后所占字节数为:", sys.getsizeof(lst2))
print("zip打包:", lst2)  # 可以看到zip函数是把多个迭代器中同地位的数据放到一起,多出来的舍弃
print()

# 嵌套列表的压缩
m = [[1, 2, 3], [4, 5, 6]]
n = [[2, 2, 2], [3, 3, 3]]
p = [[9, 9, 9]]
print("列表中嵌套列表的打包:", list(zip(m, n)))
# 同样的,如果列表的列数不同,多余的也会被舍弃
print("如果列数不同,同理:", list(zip(m, p)))
print()

# 3. zip*()函数用于解压(像指针的解引用)
a = [1, 2, 3]
b = [4, 5, 6]
lst3 = zip(a, b)  # 返回函数地址
c, d = zip(*lst3)
print("解压a:", c)
print("解压b:", d)
# 当然也可以直接解引用列表元素
lst = [(1, 5, 9), (2, 4, 8)]
a, b, c = zip(*lst)
print("解压a:", a)
print("解压b:", b)
print("解压c:", c)
print()

# 4. *zip()函数:打包后返回一个元组
a = [1, 2, 3]
b = [4, 5, 6]
print(list(zip(a, b)))
print(*zip(a, b))
print()

# 实例:实现矩阵行列互换
# zip()和zip(*)都能用于二维列表行列互换
# 但zip(*)只用带一个参数,就是矩阵本身
mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(mat)
mat1 = list(zip(mat))  # 只有一个参数,可以看作zip(mat,[])
mat2 = list(zip(*mat))  # 所以逆置要用zip(*)
print(mat1)
print(mat2)
print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值