国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-23 05:35:28
字體:
來源:轉載
供稿:網友

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

一、定義:

zip([iterable, ...])
zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓)。

二、用法示例:

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

>>> 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)]

對于這個并不是很常用函數,下面舉幾個例子說明它的用法:

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

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

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

通過python列表推導的方法,我們也能輕易完成這個任務

print [ [row[col] for row in a] for col in range(len(a[0]))][[1, 4, 7], [2, 5, 8], [3, 6, 9]]

另外一種讓人困惑的方法就是利用zip函數:

>>> 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解壓,恰好得到我們“行列互換”的效果,再通過對每個元素應用list()函數,將tuple轉換為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'

這個函數有個限制,指定概率的列表必須和元素一一對應,而且和為1,否則這個函數可能不能像預想的那樣工作。

這里需要稍微解釋下,先利用random.uniform()函數生成一個0-1之間的隨機數并復制給x,利用zip()函數將元素和他對應的概率打包成tuple,然后將每個元素的概率進行疊加,直到和大于x終止循環
這樣,”a”被選中的概率就是x取值位于0-0.1的概率,同理”b”為0.1-0.4,”c”為0.4-1.0,假設x是在0-1之間平均取值的,顯然我們的目的已經達到。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 温泉县| 宝应县| 五家渠市| 石棉县| 兴化市| 长寿区| 南郑县| 天津市| 安图县| 邯郸县| 凤凰县| 东乡族自治县| 东方市| 齐河县| 天峨县| 耿马| 横峰县| 襄城县| 封丘县| 苍南县| 集贤县| 深水埗区| 木兰县| 西藏| 麻栗坡县| 齐河县| 临武县| 华亭县| 确山县| 多伦县| 吉安市| 正安县| 水富县| 朝阳市| 全南县| 温泉县| 张家口市| 望谟县| 临夏县| 巨鹿县| 会昌县|