目錄
一、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 ...