Python3 zip()函数与Python2的函数有所不同,Python2(返回的是一个列表)就不要去学了。以下是基于Python 3 的一些笔记。
zip函数描述:
从参数中的多个迭代器取元素组成一个新的迭代器,长度由最短的参数决定,* 号操作符,与 zip 相反,zip(*) 可理解为解压。
语法:
zip(iterable1,iterable2, ...)
参数说明:
iterable--一个或多个可迭代对象(也就是说函数参数可以为字符串,列表,元组,字典)
返回值:
返回一个zip对象(一个可dict、可list的一个对象)
例子:上一篇博文的 A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
分开写
①参数为元组,dict返回的对象
a = ('a','b','c','d','e') #元组
b = (1,2,3,4,5) #元组
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(dict(ob)) #转为字典
输出
<zip object at 0x0000000002226B08> #返回一个对象
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} #字典
②参数为列表,dict返回的对象
a = ['a','b','c','d','e'] #列表
b = [1,2,3,4,5] #列表
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(dict(ob)) #转为字典
输出:
<zip object at 0x0000000001E86B08>
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
③参数为列表,list返回的对象
a = ['a','b','c','d','e'] #列表
b = [1,2,3,4,5] #列表
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(list(ob)) #转为列表
输出
<zip object at 0x0000000002806B08>
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)] #列表,元素为元组
④参数为元组,list返回的对象
a = ('a','b','c','d','e') #元组
b = (1,2,3,4,5) #元组
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(list(ob)) #转为列表
输出
<zip object at 0x00000000021F6B08>
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)] #列表,元素为元组
小结,zip函数在dict之后,转化为字典。zip函数在list之后,转化为列表,列表的元素是元组。
⑤由最短的参数决定
a = ('a','b','c','d','e') #元组
b = (1,2,3,4,5,6,7) #元组
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(list(ob)) #转为列表
输出
<zip object at 0x0000000002806B88>
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)] #6,7已经不见了
⑥ * 元组解压为列表,延续上面的例子
a = ('a','b','c','d','e') #元组
b = (1,2,3,4,5,6,7) #元组
ob = zip(a,b) #返回一个对象
print(ob) #打印
print(list(ob)) #转为列表
a1,b1 = zip(*zip(a,b))#解压
print(tuple(a1))
print(tuple(b1))
输出
<zip object at 0x00000000021F6C48>
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
('a', 'b', 'c', 'd', 'e') #同a
(1, 2, 3, 4, 5) #同b
同理,如果是列表的话也是一样的。解压出来的list后跟原来的一样。
本期zip()函数就学到这里。