关于zip的一些理解
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。我们可以使用 list() 转换来输出列表。
# 首先创建一些变量,用来做测试a=[1,2,3]b=[4,5,6]c=['f','e','l','a','i','m']d=[11,11,11,11]# 使用zip,对同纬度同类型数据进行测试zipped1=zip(a,b)# 可以看到python3返回的是zip对象,python2返回的是一个列表print(zipped1)# 我们可以使用 list() 转换来输出列表print(list(zipped1))<zip object at 0x7fb9878f3708> [(1, 4), (2, 5), (3, 6)]# 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同zipped2=zip(d,a)print(list(zipped2))# 我们也可以同时zip多个迭代器zipped3=zip(a,b,c,d)print(list(zipped3))[(11, 1), (11, 2), (11, 3)] [(1, 4, 'f', 11), (2, 5, 'e', 11), (3, 6, 'l', 11)]zipped4=zip(c,a)print(list(zipped4))# 利用 * 号操作符,可以将元组解压为列表unzip1,unzip2=zip(*zip(c,a))print(unzip1)print(unzip2)[('f', 1), ('e', 2), ('l', 3)] ('f', 'e', 'l') (1, 2, 3)zipped5=zip(d,a)print(list(zipped5))unzip1,unzip2=zip(*zip(d,a))print(unzip1)print(unzip2)[(11, 1), (11, 2), (11, 3)] (11, 11, 11) (1, 2, 3)importitertools#使用itertools,可以使得返回列表长度与最长的对象相同zipped6=itertools.zip_longest(c,a)# print(list(zipped6))unzip1,unzip2=zip(*itertools.zip_longest(c,a))print(unzip1)print(unzip2)#这里对zip对应直接进行zip(*)操作x,y=zip(*zipped6)print(x)print(y)('f', 'e', 'l', 'a', 'i', 'm') (1, 2, 3, None, None, None) ('f', 'e', 'l', 'a', 'i', 'm') (1, 2, 3, None, None, None)#在进行最后一个测试zipped7=zip(a,b,c,d)print(zipped7)a_,b_,c_,d_=zip(*zipped7)print("a_: ",a_)print("b_: ",b_)print("c_: ",c_)print("d_: ",d_)<zip object at 0x7fb9878caf08> a_: (1, 2, 3) b_: (4, 5, 6) c_: ('f', 'e', 'l') d_: (11, 11, 11)end!