Python zip 函式的用法

2021-07-03 23:03:50 字數 1788 閱讀 9469

python函式式程式設計之zip()

zip()

zip()函式接受0個或多個序列作為引數,返回乙個tuple列表。

zip()函式具體的工作機制是,將每個列表中同一位置的元素取出來組成乙個元組,存放到乙個列表中,然後返回這個列表。舉例說明:

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

>>> y = ['a','b','c']

>>> z = [4,5,6]

>>> zip_xyz = zip(x, y, z)

>>>

print zip_xyz

[(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]

對於長度不同的seq,zip()函式又怎麼處理呢?

>>> a = [1,2,3]

>>> b = [4,5,6,7]

>>> zip_ab = zip(a, b)

>>>

print zip_ab

[(1, 4), (2, 5), (3, 6)]

從上面的例子可以看出,當seq的長度不一致時,zip()會以最短的那個seq為主,進行處理,然後將多餘的捨棄掉。

zip()對只有乙個seq的處理:

>>> c = ['a', 'b', 'c']

>>> zip_c = zip(c)

>>>

print zip_c

[('a',), ('b',), ('c',)]

我們再看乙個例子

>>> a = [1, 2, 3]

>>> b = ['a', 'b', 'c']

>>> zip_ab = zip(ab)

>>> zip_ab = zip(a,b)

>>> un_zip = zip(*zip_ab)

>>>

print un_zip

[(1, 2, 3), ('a', 'b', 'c')]

一般認為這是乙個unzip過程,工作原理如下:

在執行zip(*zip_ab)之前,zip_ab的值是:[(1, 『a』), (2, 『b』), (3, 『c』)]

而zip(*zip_ab)就等價於zip((1, 『a』), (2, 『b』), (3, 『c』))

所以得出結果:[(1, 2, 3), (『a』, 『b』, 『c』)]

再來看乙個例子:

>>> x = [1,'a','b']

>>> zip_rx = zip(* [x] * 3)

>>>

print zip_rx

[(1, 1, 1), ('a', 'a', 'a'), ('b', 'b', 'b')]

看著這個結果是不是有點暈啊?嘿嘿,別著急,讓我來給你理順了它:

首先 [x]生成乙個列表的列表:[[1, 『a』, 『b』]],這個列表中只有乙個元素[1,』a』,』b』]

其次[x] * 3,表示將列表中的元素列印三次,即生成了含有三個元素的列表:

[[1, 『a』, 『b』], [1, 『a』, 『b』], [1, 『a』, 『b』]]

最後是zip(* [x] * 3)就等價於

zip([1, 『a』, 『b』], [1, 『a』, 『b』], [1, 『a』, 『b』]),到這裡我想結果很明確了吧!

注意:在函式呼叫中,使用*list/tuple的方式表示將list/tuple分開,作為位置引數傳遞給對應函式,但前提是對應函式必須支援不定個數的位置引數。

Python zip函式及用法

zip 函式可以把兩個列表 壓縮 成乙個 zip 物件 可迭代物件 這樣就可以使用乙個迴圈並行遍歷兩個列表。為了測試 zip 函式的功能,我們可以先在互動式直譯器中 試驗 一下該函式的功能。a a b c b 1,2,3 x for x in zip a,b a 1 b 2 c 3 從上面的測試結果...

Python zip 函式用法詳解

zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。注 在python3中返回的是zip物件 zip的語法格式 zip iterable,其中 iterable,表示多個列表 元組 字典 集合 字串,甚至還可以為 range 區間。下面演示一下z...

Python zip函式及用法

zip 函式是 python 內建函式之一,它可以將多個序列 列表 元組 字典 集合 字串以及 range 區間構成的列表 壓縮 成乙個 zip 物件。所謂 壓縮 其實就是將這些序列中對應位置的元素重新組合,生成乙個個新的元組。和 python 3.x 版本不同,python 2.x 版本中的 zi...