zip函數的原型為:zip([iterable, …])
參數iterable為可迭代的對象,並且可以有多個參數。該函數返回一個以元組為元素的列表,其中第 i 個元組包含每個參數序列的第 i 個元素。返回的列表長度被截斷為最短的參數序列的長度。只有一個序列參數時,它返回一個1元組的列表。沒有參數時,它返回一個空的列表。
import numpy as np a=[1,2,3,4,5] b=(1,2,3,4,5) c=np.arange(5) d="zhang" zz=zip(a,b,c,d) print(zz) 輸出: [(1, 1, 0, 'z'), (2, 2, 1, 'h'), (3, 3, 2, 'a'), (4, 4, 3, 'n'), (5, 5, 4, 'g')]
當沒有參數的時候
import numpy as np zz=zip() print(zz) 輸出:[]
當只有一個參數的時候
import numpy as np a=[1,2,3] zz=zip(a) print(zz) 輸出:[(1,), (2,), (3,)]
當多個參數長度不同的時候(短板效應,自動截斷)
import numpy as np a=[1,2,3] b=[1,2,3,4] c=[1,2,3,4,5] zz=zip(a,b,c) print(zz) 輸出:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
zip() 和 * 操作符一起操作可以用來 unzip 一個列表,看下面的代碼:
import numpy as np a=[1,2,3] b=[4,5,6] c=[7,8,9] zz=zip(a,b,c) print(zz) x,y,z=zip(*zz) print(x) print(y) print(z) 輸出: [(1, 4, 7), (2, 5, 8), (3, 6, 9)] (1, 2, 3) (4, 5, 6) (7, 8, 9)
注意:這里輸出的每個都是元組,而不一定是原來的類型,但是值不會發生變化(除非原來的參數列表長度不一樣,看下面的代碼)
import numpy as np a=[1,2,3] b=[4,5,6,7] c=[8,9,10,11,12] zz=zip(a,b,c) print(zz) x,y,z=zip(*zz) print(x) print(y) print(z) 輸出: [(1, 4, 8), (2, 5, 9), (3, 6, 10)] (1, 2, 3) (4, 5, 6) (8, 9, 10)
unzip后的列表b和c的值都少了。