美文网首页
Python zip方法理解

Python zip方法理解

作者: 敢梦敢当 | 来源:发表于2017-11-01 10:32 被阅读0次

zip函数的原型为:zip([iterable, …])

参数iterable为可迭代的对象,并且可以有多个参数。该函数返回一个以元组为元素的列表,其中第 i 个元组包含每个参数序列的第 i 个元素。返回的列表长度被截断为最短的参数序列的长度。只有一个序列参数时,它返回一个1元组的列表。没有参数时,它返回一个空的列表。

zip函数 通俗一点就是一个可以结合多个列表的一个函数

举个例子:

x = [1, 2, 3]  
y = [4, 5, 6]  
z = [7, 8, 9]  
xyz = zip(x, y, z)  
print(list(i))

[(1, 4, 7),(2, 5, 8),(3, 6, 9)] #可以看到zip返回出来的还是一个tuple列表
可以看出zip将三个列表采用一一对应的方式相结合起来了

再举一个例子:

x = ["id", "name", "age"]  
y = [3306,"dh",18]  
xy = zip(x, y)  
print(list(xy))  
[('id', 3306), ('name', 'dh'), ('age', 18)]  

zip还可以处理一个或多个的列表

x = [1, 2, 3, 4]  
x = zip(x)  
print(list(x))  
[(1,), (2,), (3,), (4,)]  

要是两个列表的长度不一致zip会怎么处理呢?

x = [1, 2, 3]  
y = [4, 5, 6, 7]  
xy = zip(x, y)  
print(list(xy)
[(1, 4), (2, 5), (3, 6)]  

可以看出y列表要比x列表长,但是zip后是以x为基准来结合的 注:(zip结合列表时会以最短的那个列表为它的长度)

zip类似于压缩与解压缩的操作:

x = [1, 2, 3]                   #unzip过程 类似于zip的逆过程  
y = [4, 5, 6]  
z = [7, 8 ,9]  
xyz = zip(x, y, z)  
zyx = zip(*xyz)                 # 在这里我将这个过程理解成一个解压缩的过程,*xyz 表示将xyz列表中的元素来zip,当xyz列表中存的是列表元素时,就是将列表元素来zip。也就是将列表还原  
print(list(zyx))                #xyz是:xyz=[[1, 4, 7], [2, 5, 8], [3, 6, 9]]   zip(*xyz)=>zip([1, 2, 3],[4, 5, 6],[7, 8, 9])  
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]  

zip生成列表的方法:

x = [1, 2, 3, 4]  
y = zip(* [x] * 2)          #完成步骤 1: [x]会生成一个只有一个x元素的列表    2: [x]*2  列表元素*重复2次     3:那么zip(* [x] * 2)则表示zip(x, x)  
print(list(y)
[(1, 1), (2, 2), (3, 3), (4, 4)]  

相关文章

网友评论

      本文标题:Python zip方法理解

      本文链接:https://www.haomeiwen.com/subject/mrewpxtx.html