日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python中zip()函數(shù)用法實(shí)例教程

系統(tǒng) 1775 0

本文實(shí)例講述了Python中zip()函數(shù)的定義及用法,相信對(duì)于Python初學(xué)者有一定的借鑒價(jià)值。詳情如下:

一、定義:

zip([iterable, ...])
zip()是Python的一個(gè)內(nèi)建函數(shù),它接受一系列可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入?yún)?shù)的長(zhǎng)度不等,則返回list的長(zhǎng)度和參數(shù)中長(zhǎng)度最短的對(duì)象相同。利用*號(hào)操作符,可以將list unzip(解壓)。

二、用法示例:

讀者看看下面的例子,對(duì)zip()函數(shù)的基本用法就可以明白了:

            
>>> 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)
[(1, 2, 3), (4, 5, 6)]

          

對(duì)于這個(gè)并不是很常用函數(shù),下面舉幾個(gè)例子說(shuō)明它的用法:

1.二維矩陣變換(矩陣的行列互換)

比如我們有一個(gè)由列表描述的二維矩陣

            
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

          

通過python列表推導(dǎo)的方法,我們也能輕易完成這個(gè)任務(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解壓,恰好得到我們“行列互換”的效果,再通過對(duì)每個(gè)元素應(yīng)用list()函數(shù),將tuple轉(zhuǎn)換為list

2.以指定概率獲取元素

            
>>> 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'


          

這個(gè)函數(shù)有個(gè)限制,指定概率的列表必須和元素一一對(duì)應(yīng),而且和為1,否則這個(gè)函數(shù)可能不能像預(yù)想的那樣工作。

這里需要稍微解釋下,先利用random.uniform()函數(shù)生成一個(gè)0-1之間的隨機(jī)數(shù)并復(fù)制給x,利用zip()函數(shù)將元素和他對(duì)應(yīng)的概率打包成tuple,然后將每個(gè)元素的概率進(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á)到。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 靖安县| 巩义市| 西吉县| 罗山县| 济源市| 黔西县| 武夷山市| 舞钢市| 宁国市| 彰武县| 高青县| 兴海县| 玛纳斯县| 梅河口市| 平阳县| 元朗区| 五莲县| 伊春市| 千阳县| 饶平县| 西盟| 阜新市| 姜堰市| 射阳县| 监利县| 胶州市| 大新县| 枝江市| 泸西县| 盐源县| 巴中市| 陕西省| 嘉峪关市| 镇沅| 大埔县| 荣成市| 杂多县| 宿州市| 哈密市| 固始县| 石嘴山市|