Python中zip 函式用法舉例

2021-06-28 07:58:03 字數 2268 閱讀 9292

定義:zip([iterable, ...])

zip()是python的乙個內建函式,它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成乙個個tuple(元組),然後返回由這些tuples組成的list(列表)。若傳入引數的長度不等,則返回list的長度和引數中長度最短的物件相同。利用*號操作符,可以將list unzip(解壓),看下面的例子就明白了:

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

)]

對於這個並不是很常用函式,下面舉幾個例子說明它的用法:

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

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

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

print[[

row[

col]

forrow ina

]for

col

inrange

(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

>>>

import

random

>>>

defrandom_pick

(seq

,probabilities

):x

=random

.uniform(0

,1)cumulative_probability

=0.0

foritem

,item_probability

inzip

(seq

,probabilities

):cumulative_probability

+=item_probability

ifx <

cumulative_probability

:break

return

item

>>>

fori

inrange(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之間平均取值的,顯然我們的目的已經達到

Python中zip 函式用法舉例

定義 zip iterable,zip 是python的乙個內建函式,它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成乙個個tuple 元組 然後返回由這些tuples組成的list 列表 若傳入引數的長度不等,則返回list的長度和引數中長度最短的物件相同。利用 號操作符,可以將list...

python中zip 函式的用法

zip函式的原型為 zip iterable,引數iterable為可迭代的物件,並且可以有多個引數。該函式返回乙個以元組為元素的列表,其中第 i 個元組包含每個引數序列的第 i 個元素。返回的列表長度被截斷為最短的引數序列的長度。只有乙個序列引數時,它返回乙個1元組的列表。沒有引數時,它返回乙個空...

python中zip 函式的用法

zip函式的原型為 zip iterable,引數iterable為可迭代的物件,並且可以有多個引數。該函式返回乙個以元組為元素的列表,其中第 i 個元組包含每個引數序列的第 i 個元素。返回的列表長度被截斷為最短的引數序列的長度。只有乙個序列引數時,它返回乙個1元組的列表。沒有引數時,它返回乙個空...