Python中的内置函数---zip()

形式:zip(*iterables)
参数解释:iterables---迭代器:可以是内建的迭代器,比如:字符串、列表、元组、字典、集合等,也可以是用户定义的迭代器,其中需要包含__iter__()方法
返回值:返回一个由元组组成的对象,以下说的都是经过list()之后的列表形式。
             1)如果没有参数,将返回一个空的迭代器;
             2)如果只有一个参数,将返回一个1-tuple的迭代器,意思是其中每个元组只有一个元素;
             3)如果有多个参数,则返回的迭代器中的每个元组的元素个数由最短长度的输入参数决定。

注意:1)zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换;
          
2)zip(*)实现解压功能,即将压缩值转换回原来的形式。解压的时候,传入的参数可以为转换后的列表,亦可以是未转换的对象,结果一样(看6、7),刚开始我以为虽然没有进list()转换,但它们指的是一样的;但是双重zip后,结果却不一样(看8、9),如果指的一样,那9就不应该为空列表了吧;所以现在有点搞不明白了,之后再看看源码,搞清楚了补进来!

下面从代码的角度更好的理解:

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]

no_zip = list(zip())       #1)没有参数:[]
one_zip = list(zip(a))     #2)一个参数:[(1,),(2,),(3,)]
two_zip = list(zip(a,b))   #3)两个参数:[(1, 4), (2, 5), (3, 6)]
two_zip_unequal=list(zip(a,c))   #4)两个长度不等的参数:[(1, 4), (2, 5), (3, 6)]
two_zip_no_list = zip(a,b)       #5)不用list的话,返回一个对象:<zip object at 0x000001703ED19908>
zip_unzip = list(zip(*two_zip))                #6)解压-参数为列表:[(1, 2, 3), (4, 5, 6)]
zip_unzip_no_list= list(zip(*two_zip_no_list)) #7)解压-参数为对象:[(1, 2, 3), (4, 5, 6)]
double_zip=list(zip(two_zip))                  #8)双重zip-参数为列表:[((1, 4),), ((2, 5),), ((3, 6),)]
double_zip_no_list=list(zip(two_zip_no_list))  #9)双重zip-参数为对象:[]

y1 = list(zip(*[a]))          #[(1,), (2,), (3,)]
y2 = list(zip([a]))           #[([1, 2, 3],)]
y3 = list(zip(*[a]* 2))       #[(1, 1), (2, 2), (3, 3)]
y4 = list(zip([a] * 2))       #[([1, 2, 3],), ([1, 2, 3],)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值