python中的 zip函數(shù)詳解及用法舉例
python中zip()函數(shù)用法舉例
定義:zip([iterable, ...])
zip()是Python的一個內(nèi)建函數(shù),它接受一系列可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入?yún)?shù)的長度不等,則返回list的長度和參數(shù)中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓),看下面的例子就明白了:
示例1
x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z)
print xyz運(yùn)行的結(jié)果是:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
示例2,在兩個list長度不相等時的情況:
x = [1, 2, 3] y = [4, 5, 6, 7] xy = zip(x, y)
print xy運(yùn)行的結(jié)果是:
[(1, 4), (2, 5), (3, 6)]
示例3
>>> name=('jack','beginman','sony','pcky') >>> age=(2001,2003,2005,2000) >>> for a,n in zip(name,age): print a,n
輸出:
jack 2001 beginman 2003 sony 2005 pcky 2000
示例4,只有一個list的情況:
x = [1, 2, 3] x = zip(x)
print x運(yùn)行的結(jié)果是:
[(1,), (2,), (3,)]
示例5:
搭配for循環(huán),支持并行迭代操作方法 zip()方法用在for循環(huán)中,就會支持并行迭代:
l1 = [2,3,4] l2 = [4,5,6] for (x,y) in zip(l1,l2): print x,y,'--',x*y 2 4 -- 8 3 5 -- 15 4 6 -- 24
其實(shí)它的工作原理就是使用了zip()的結(jié)果,在for循環(huán)里解包zip結(jié)果中的元組,用元組賦值運(yùn)算。就好像(x,y)=(2,6),賦值、序列解包操作。在對文件的操作中我們也會用到遍歷,例如Python遍歷文件夾目錄與文件操作,就是很方便實(shí)用的。
1
示例6:二維矩陣變換(矩陣的行列互換)
比如我們有一個由列表描述的二維矩陣 ,a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],通過python列表推導(dǎo)的方法,我們也能輕易完成這個任務(wù)
print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
另外一種讓人困惑的方法就是利用zip函數(shù):
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] >>> map(list,zip(*a))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們“行列互換”的效果,再通過對每個元素應(yīng)用list()函數(shù),將tuple轉(zhuǎn)換為list
示例7:以指定概率獲取元素
>>> import random >>> def random_pick(seq,probabilities): x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(seq, probabilities): cumulative_probability += item_probability if x < cumulative_probability: break return item >>> for i in range(15): random_pick("abc",[0.1,0.3,0.6]) 'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'
這個函數(shù)有個限制,指定概率的列表必須和元素一一對應(yīng),而且和為1,否則這個函數(shù)可能不能像預(yù)想的那樣工作。稍微解釋下,先利用random.uniform()函數(shù)生成一個0-1之間的隨機(jī)數(shù)并復(fù)制給x,利用zip()函數(shù)將元素和他對應(yīng)的概率打包成tuple,然后將每個元素的概率進(jìn)行疊加,直到和大于x終止循環(huán)
這樣,”a”被選中的概率就是x取值位于0-0.1的概率,同理”b”為0.1-0.4,”c”為0.4-1.0,假設(shè)x是在0-1之間平均取值的,顯然我們的目的已經(jīng)達(dá)到
總結(jié)
以上所述是小編給大家介紹的python中的 zip函數(shù)詳解及用法舉例,希望對大家有所幫助!
- python中zip函數(shù)用法詳解(全)
- python內(nèi)置函數(shù)zip詳解
- python 內(nèi)置函數(shù)-range()+zip()+sorted()+map()+reduce()+filter()
- python中zip()函數(shù)遍歷多個列表方法
- Python中zip函數(shù)如何使用
- Python中zip()函數(shù)的簡單用法舉例
- python3中zip()函數(shù)使用詳解
- Python zip()函數(shù)用法實(shí)例分析
- 淺談Python中的zip()與*zip()函數(shù)詳解
- Python中zip()函數(shù)用法實(shí)例教程
- zip在python中的用法小結(jié)
相關(guān)文章
對python PLT中的image和skimage處理圖片方法詳解
今天小編就為大家分享一篇對python PLT中的image和skimage處理圖片方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python中threading開啟關(guān)閉線程操作
這篇文章主要介紹了python中threading開啟關(guān)閉線程操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Tensorflow與Keras自適應(yīng)使用顯存方式
這篇文章主要介紹了Tensorflow與Keras自適應(yīng)使用顯存方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06TensorFLow 不同大小圖片的TFrecords存取實(shí)例
今天小編就為大家分享一篇TensorFLow 不同大小圖片的TFrecords存取實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率
這篇文章主要介紹了Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python TCP接收數(shù)據(jù)不全的問題解決
本文主要介紹了Python TCP接收數(shù)據(jù)不全的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python實(shí)現(xiàn)base64編碼的圖片保存到本地功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)base64編碼的圖片保存到本地功能,涉及Python針對base64編碼解碼與圖形文件輸出保存相關(guān)操作技巧,需要的朋友可以參考下2018-06-06使用 Python 實(shí)現(xiàn)簡單的 switch/case 語句的方法
這篇文章主要介紹了用 Python 實(shí)現(xiàn)簡單的 switch/case 語句的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09