python中zip函數有哪些高級用法?
一、定義:
zip([iterable, ...])zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓)。
二、用法示例:
讀者看看下面的例子,對zip()函數的基本用法就可以明白了:
?123456789對于這個并不是很常用函數,下面舉幾個例子說明它的用法:
1.二維矩陣變換(矩陣的行列互換)
比如我們有一個由列表描述的二維矩陣
?1通過python列表推導的方法,我們也能輕易完成這個任務
?12另外一種讓人困惑的方法就是利用zip函數:
?12345這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們“行列互換”的效果,再通過對每個元素應用list()函數,將tuple轉換為list
2.以指定概率獲取元素
?123456789101112131415161718192021222324252627這個函數有個限制,指定概率的列表必須和元素一一對應,而且和為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之間平均取值的,顯然我們的目的已經達到。