python3 zip() 函数使用指南

zip()函数用于对多个可遍历容器对应元素的打包,zip(*)的作用刚好与之相反。在python2、python3中zip()函数有所不同。

python2中的zip() & zip(*)

zip(iterator1,iterator2)

zip(*iterator)

python2中zip()非常简单,其作用就是将iterator1和iterator2中相同位置的元素打包成一个元组,最后返回一个包含这些元组的列表。长度以短的iterator为基准。zip(*)就是把参数iterator(一般都是zip()打包生成的iterator)拆包,返回一个列表,列表中每个元素是拆包出来原始容器。
在这里插入图片描述

python3中的zip() & zip(*)

zip()

python3中zip()函数做了比较大的改动,zip()返回的将不再是一个列表,而是一个封装的 zip对象 ,目的是为了节省空间。
在这里插入图片描述
这个对象没办法直接打印输出或者使用,只能先手动将其转化为list
在这里插入图片描述
但是zip对象本身依旧是可以被遍历
在这里插入图片描述
乍一看貌似和普通list没什么区别,既然可以直接遍历那为什么还要把他先转为list?
因为zip对象还有一个特点就是即用即扔
在这里插入图片描述
可以看到在遍历这个对象之后,再把它转为list,将会是一个空的list.
即用即扔的意思是,zip对象中的内容一旦被访问,立即释放。访问什么,就释放什么。以此达到减少内存占用的目的。
在这里插入图片描述

zip(*)

zip(*)是zip()配套的逆向操作,和python2相比,它接收的参数不仅可以是普通的iterator ,也可以是zip对象。不管输入是什么,它返回的都会是一个zip对象。

传入zip:
在这里插入图片描述
传入list:(当list中,每个元素长度不一致时,默认以最短那个为基准)
在这里插入图片描述

最后还有一点,zip对象还可以通过赋值直接被拆封成多个tuple:

在这里插入图片描述
补充:

另外,zip()和zip(* )在某在条件下的功能是可以相互替代的,并没有严格意义上的互逆。例如:
在这里插入图片描述
也就是说,zip()和zip(*)的唯一差别其实就是输入对象的个数不同。把两个迭代对象输入到zip()中,和把两个迭代对象组成一个列表输入到zip( *)中,达到的效果完全一致。

总结

python3中的zip对象有如下性质:

  1. 可遍历迭代
  2. 即用即扔
  3. 赋值解封为tuple

参考:

菜鸟教程–Python2 zip() 函数
菜鸟教程–Python3 zip() 函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值