zip函数

zip函数

打包

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

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同

list1 = [1,2,3,4,5]
list2 = ["hello","good","nice","haha"]
set3 = {True,False,None,0}
zipobj = zip(list1,list2,set3)  # 打包

print(zipobj) # 这是一个包,显示的是包所在的地址 <zip object at 0x00000149CFFFAB48>

print(list(zipobj)) #可以将包转化为列表,查看包中的内容 

# 打印结果为 [(1, 'hello', False), (2, 'good', True), (3, 'nice', None)]

对于打印的结果,或许多多少少都会有一些疑惑,这里逐一进行解释

1、为什么列表中的元组只有3个?

首先看一下 set3,这是一个set集合set集合有两个特点:去重无序

打印一下 set3,会发现,得到的结果是{False, True, None},因为在这里,0=False,所以 set3里,其实只有三个元素。
虽然set集合是无序的,但是底层代码逻辑,还是以某种规则对元素内容进行了排序,False就排到了True前面,这一点就不再详细进行说明。

2、打包的具体过程

  • 首先在list1中取出元素1,在list2中取出元素hello,在set3中取出元素False,组成了第一个元组(1, 'hello', False)
  • 然后在list1中取出元素2,在list2中取出元素good,在set3中取出元素True,组成了第二个元组(2, 'good', True)
  • list1中取出元素3,在list2中取出元素nice,在set3中取出元素None,组成了第三个元组(3, 'nice', None)
  • set3里只有三个元素,所以,list1list2中剩余的元素就被舍弃,最后,将三个元组放入列表中,[(1, 'hello', False), (2, 'good', True), (3, 'nice', None)],最终打包完成。

解包

zip()函数可以对 zip对象进行解包处理

语法:zip(*zipobj)

list1 = [1,2,3,4,5]
list2 = ["hello","good","nice","haha"]
set3  = {True,False,None,0}

zipobj = zip(list1,list2,set3 ) # 打包

print(zip(*zipobj)) #解包 显示的也是一串地址 <zip object at 0x000001B34E5FAB88>

# 若想查看解包的内容,可使用for循环打印(需将上一步print注释,因为上一步中已经解包)
for i in zip(*zipobj):
    print(i)
    
# 打印结果
(1, 2, 3)
('hello', 'good', 'nice')
(False, True, None)

上面已经详细描述了打包的过程,而解包,其实就是将打包的过程逆转。最终打包的结果是[(1, 'hello', False), (2, 'good', True), (3, 'nice', None)]

  • 列表中有三个元组,第一个元组(1, 'hello', False),第二个元组(2, 'good', True),第三个元组(3, 'nice', None)
  • 将第一个元组中的1取出,第二个元组中的2取出,第三个元组中的3取出,重新组成第一个新的元组(1, 2, 3)
  • 将第一个元组中的hello取出,第二个元组中的good取出,第三个元组中的nice取出,重新组成第二个新的元组('hello', 'good', 'nice')
  • 将第一个元组中的False取出,第二个元组中的True取出,第三个元组中的None取出,重新组成第三个新的元组(1, 2, 3)
  • 最后,通过for循环,将三个新的元组打印出来
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值