Python學習系列之zip函式

2021-09-09 06:52:17 字數 3774 閱讀 6153

目錄

一、zip函式(內建函式)

1.1 定義

基本語法:

引數說明:

返回值:

示例:1.2 處理列表

1.3 處理元組     

1.4 處理字典             

1.5 處理乙個引數和空列表

python 2:zip()函式用於將可迭代的物件(字典,列表,元組,集合,字串等)作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表

python 3:zip()函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的物件,這樣做的好處是節約了不少的記憶體。我們可以使用 list() 轉換來輸出列表。

python2和python3只是返回值不同,用法相同。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用* 號操作符,可以將元組解壓為列表

zip 方法在 python 2 和 python 3 中的不同:在 python 3.x 中為了減少記憶體,zip() 返回的是乙個物件。如需展示列表,需手動 list() 轉換。

zip([iterable, ...])
python2 返回元組列表。

python3 返回乙個物件。

python 2

>>> a = [1,2,3]

>>> b = [4,5,6]

>>> c = [4,5,6,7,8]

>>> zipped = zip(a,b) # 打包為元組的列表

[(1, 4), (2, 5), (3, 6)]

>>> zip(a,c) # 元素個數與最短的列表一致

[(1, 4), (2, 5), (3, 6)]

>>> zip(*zipped) # 與 zip 相反,*zipped 可理解為解壓,返回二維矩陣式

[(1, 2, 3), (4, 5, 6)]

>>> list(zip(*zipped)[1]) # 與 zip 相反,*zipped 可理解為解壓,嚴格講還是元組列表,

[4, 5, 6] # 不過元組可以轉為列表

python 3

>>> a = [1,2,3]

>>> b = [4,5,6]

>>> c = [4,5,6,7,8]

>>> zipped = zip(a,b) # 返回乙個物件

>>> zipped

>>> list(zipped) # list() 轉換為列表

[(1, 4), (2, 5), (3, 6)]

>>> list(zip(a,c)) # 元素個數與最短的列表一致

[(1, 4), (2, 5), (3, 6)]

>>> zip(*zip(a,b))

# 返回乙個物件

>>> list(zip(*zip(a,b)))

[(1, 2, 3), (4, 5, 6)]

>>> a1, a2 = zip(*zip(a,b)) # 與 zip 相反,zip(*) 可理解為解壓,返回二維矩陣式

>>> a1

(1, 2, 3)

>>> a2

(4, 5, 6)

>>> list(a1) # 轉換為列表

[1, 2, 3]

>>> list(a2)

[4, 5, 6]

通過 zip() 函式及for迴圈對多個列表進行並行迭代:

>>> days = ['monday', 'tuesday', 'wednesday']

>>> fruits = ['banana', 'orange', 'peach']

>>> drinks = ['coffee', 'tea', 'beer']

>>> desserts = ['tiramisu', 'ice cream', 'pie', 'pudding']

>>> for day, fruit, drink, dessert in zip(days, fruits, drinks, desserts):

... print(day, ": drink", drink, "- eat", fruit, "- enjoy", dessert)

...monday : drink coffee - eat banana - enjoy tiramisu

tuesday : drink tea - eat orange - enjoy ice cream

wednesday : drink beer - eat peach - enjoy pie

zip() 函式在最短列表「用完」時就會停止。上面例子中的列表(desserts)是最長的,所以我們無法填充列表,除非人工擴充套件其他列表。按照最短列表停止遍歷。使用 zip() 函式可以遍歷多個列表,在具有相同位移的項之間建立元組。

現在使用 zip() 函式配對兩個元組。函式的返回值既不是元組也不是列表,而是乙個整合在一起的可迭代變數(可迭代的元組)

>>> english = 'monday', 'tuesday', 'wednesday' # 這種建立的方式型別是元組

>>> french = 'lundi', 'mardi', 'mercredi'

>>> list( zip(english, french) )

[('monday', 'lundi'), ('tuesday', 'mardi'), ('wednesday', 'mercredi')]

配合 dict() 函式和 zip() 函式的返回值就可以得到一本微型的英法詞典:

>>> dict( zip(english, french) )

構建字典:

方法一:使用for迴圈

k = ["a","b","c"]

v = ["1","2","3"]

d2 = {}

for (k,v) in zip(k,v):d2[k]=v

print d2

方法二:使用dict

k = ["a","b","c"]

v = ["1","2","3"]

list(zip(k,v))

[('a', '1'), ('b', '2'), ('c', '3')]

d3 = dict(zip(k,v)) # 型別轉換

print d3

zip函式在只有乙個引數時: 

x = [1, 2, 3]

x = zip(x)

print x

[(1,), (2,), (3,)]

zip函式在沒有引數時:

x = zip()

print x

python之zip函式和sorted函式

zip 函式和sorted 函式 zip 函式 將兩個序列合併,返回zip物件,可強制轉換為列表或字典 sorted 函式 對序列進行排序,返回乙個排序後的新列表,原資料不改變 合併兩個列表,以列表型別輸出 list str a b c d list num 1,2,3,4 list new zip...

python函式學習內容 python之函式學習

usr bin env python 位置引數說明 位置引數 通過引數傳遞的位置來決定 def echo1 x,y print x format x print y format y return x y res1 echo1 2,6 print res1 關鍵字引數 關鍵字引數 通過引數名稱來決定...

Python 內建函式之zip

zip函式用於將可迭代物件作為引數,將可迭代物件中的元素打包成乙個個元祖,然後返回這些元祖組成的乙個zip物件,可以使用list 方法將這個zip物件轉化為列表,列表中的元素的資料型別依舊是元組型別。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同。l1 1,2,3 l2 a b c ...