Python中的zip函式

2021-08-21 17:15:47 字數 1582 閱讀 3877

定義: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] 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函式接受任意多個序列作為引數,將所有序列按相同的索引組合成乙個元素是各個序列合併成的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』)]

Python中的Zip 函式

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

python中的zip函式

先貼上原始碼 zip iter1 iter2 zipobject return a zip object whose next method returns a tuple where the i th element comes from the i th iterable argument.th...

Python中的zip函式

zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。ps.如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。a 1,2,3 b 4,5,6 c 4,5,6,7,8 zipped zip a,b ...