Python中zip函式的使用方法

2021-09-22 08:41:14 字數 2648 閱讀 6503

定義: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)]

(1)二維矩陣轉置

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

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 通過python列表推導的方法,我們也能輕易完成這個任務

(從下邊的**也可以看出這種one-line for-loop的index順序從左向右依次是維數)

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

這種方法速度更快但也更難以理解

zip(*a):將list看成tuple解壓,恰好得到我們「行列互換」的效果;

map(list,zip(*a)):再通過對每個元素應用list()函式,將tuple轉換為list;

zip函式接受任意多個序列作為引數,將所有序列按相同的索引組合成乙個元素是各個序列合併成的tuple的新序列,新的序列的長度以引數中最短的序列為準。另外(*)操作符與zip函式配合可以實現與zip相反的功能,即將合併的序列拆成多個tuple。

①tuple的新序列

>>>x=[1,2,3],y=['

a','

b','c'

]>>>zip

(x,y)

[(1,'

a'),(2,'

b'),(3,'

c')]

②新的序列的長度以引數中最短的序列為準.

>>>x=[1,2],y=['

a','

b','c'

]>>>zip

(x,y)

[(1,'

a'),(2,'

b')]

③(*)操作符與zip函式配合可以實現與zip相反的功能,即將合併的序列拆成多個tuple。

>>>x=[1,2,3],y=['

a','

b','c'

]>>>zip(*zip

(x,y))

[(1,2,3),('

a','

b','

c')]

(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

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

python中的zip函式使用

1.函式的介紹 python zip函式使用 zip函式的用法 接受任意多個 包括0個和1個 序列作為引數,返回乙個tuple列表。接受一系列可迭代物件作為引數,將物件中對應的元素打包成乙個個tuple 元組 然後返回由這些tuples組成的list 列表 若傳入引數的長度不等,則返回list的長度...

Python中的zip函式使用示例

zip函式接受任意多個 包括0個和1個 序列作為引數,返回乙個tu程式設計客棧ple列表。具體意思不好用文本來表述,直接看示例 1.示例1 複製 如下 x 1,2,3 y 4,5,6 z 7,8,9 xyz zip x,y,z print xyz 執行的結果是 1,4,7 2,5,8 3,6,9 從...

Python中的Zip 函式

zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。zip 語法 zip iterable,引數說明 返回元組列表。以下例項展示了 zip 的使...