1. 程式人生 > 實用技巧 >python中zip()函式的用法

python中zip()函式的用法

zip函式的原型為:zip([iterable, …])

引數iterable為可迭代的物件,並且可以有多個引數。該函式返回一個以元組為元素的列表,其中第 i 個元組包含每個引數序列的第 i 個元素。返回的列表長度被截斷為最短的引數序列的長度。只有一個序列引數時,它返回一個1元組的列表。沒有引數時,它返回一個空的列表。

 1 import numpy as np
 2 a=[1,2,3,4,5]
 3 b=(1,2,3,4,5)
 4 c=np.arange(5)
 5 d="zhang"
 6 zz=zip(a,b,c,d)
 7 print(zz)
 8 
 9 輸出:
10
[(1, 1, 0, 'z'), (2, 2, 1, 'h'), (3, 3, 2, 'a'), (4, 4, 3, 'n'), (5, 5, 4, 'g')]

當沒有引數的時候

1 import numpy as np
2 zz=zip()
3 print(zz)
4 
5 輸出:[]

當只有一個引數的時候

1 import numpy as np
2 a=[1,2,3]
3 zz=zip(a)
4 print(zz)
5 
6 輸出:[(1,), (2,), (3,)]

當多個引數長度不同的時候(短板效應,自動截斷)

1 import numpy as np
2 a=[1,2,3]
3 b=[1,2,3,4] 4 c=[1,2,3,4,5] 5 zz=zip(a,b,c) 6 print(zz) 7 8 輸出:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]

zip() 和 * 操作符一起操作可以用來 unzip 一個列表,看下面的程式碼:

 1 import numpy as np
 2 a=[1,2,3]
 3 b=[4,5,6]
 4 c=[7,8,9]
 5 zz=zip(a,b,c)
 6 print(zz)
 7 x,y,z=zip(*zz)
 8 print(x)
 9 print(y)
10 print(z)
11 
12 輸出:
13
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 14 (1, 2, 3) 15 (4, 5, 6) 16 (7, 8, 9)

注意:這裡輸出的每個都是元組,而不一定是原來的型別,但是值不會發生變化(除非原來的引數列表長度不一樣,看下面的程式碼)

 1 import numpy as np
 2 a=[1,2,3]
 3 b=[4,5,6,7]
 4 c=[8,9,10,11,12]
 5 zz=zip(a,b,c)
 6 print(zz)
 7 
 8 x,y,z=zip(*zz)
 9 print(x)
10 print(y)
11 print(z)
12 
13 輸出:
14 [(1, 4, 8), (2, 5, 9), (3, 6, 10)]
15 (1, 2, 3)
16 (4, 5, 6)
17 (8, 9, 10)

unzip後的列表b和c的值都少了。

原文連線:https://www.cnblogs.com/Thinker-Bob/articles/10592117.html