zip函數(shù)的原型為:zip([iterable, …])
參數(shù)iterable為可迭代的對(duì)象,并且可以有多個(gè)參數(shù)。該函數(shù)返回一個(gè)以元組為元素的列表,其中第 i 個(gè)元組包含每個(gè)參數(shù)序列的第 i 個(gè)元素。返回的列表長(zhǎng)度被截?cái)酁樽疃痰膮?shù)序列的長(zhǎng)度。只有一個(gè)序列參數(shù)時(shí),它返回一個(gè)1元組的列表。沒有參數(shù)時(shí),它返回一個(gè)空的列表。
zip函數(shù) 通俗一點(diǎn)就是一個(gè)可以結(jié)合多個(gè)列表的一個(gè)函數(shù)
舉個(gè)例子:
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返回出來的還是一個(gè)tuple列表
可以看出zip將三個(gè)列表采用一一對(duì)應(yīng)的方式相結(jié)合起來了
再舉一個(gè)例子:
x = ["id", "name", "age"]
y = [3306,"dh",18]
xy = zip(x, y)
print(list(xy))
[('id', 3306), ('name', 'dh'), ('age', 18)]
zip還可以處理一個(gè)或多個(gè)的列表
x = [1, 2, 3, 4]
x = zip(x)
print(list(x))
[(1,), (2,), (3,), (4,)]
要是兩個(gè)列表的長(zhǎng)度不一致zip會(huì)怎么處理呢?
x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)
print(list(xy)
[(1, 4), (2, 5), (3, 6)]
可以看出y列表要比x列表長(zhǎng),但是zip后是以x為基準(zhǔn)來結(jié)合的 注:(zip結(jié)合列表時(shí)會(huì)以最短的那個(gè)列表為它的長(zhǎng)度)
zip類似于壓縮與解壓縮的操作:
x = [1, 2, 3] #unzip過程 類似于zip的逆過程
y = [4, 5, 6]
z = [7, 8 ,9]
xyz = zip(x, y, z)
zyx = zip(*xyz) # 在這里我將這個(gè)過程理解成一個(gè)解壓縮的過程,*xyz 表示將xyz列表中的元素來zip,當(dāng)xyz列表中存的是列表元素時(shí),就是將列表元素來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]會(huì)生成一個(gè)只有一個(gè)x元素的列表 2: [x]*2 列表元素*重復(fù)2次 3:那么zip(* [x] * 2)則表示zip(x, x)
print(list(y)
[(1, 1), (2, 2), (3, 3), (4, 4)]