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基礎之常用內建函式
python常用內建函式 dir builtins 獲取內建函式 dir random 檢視random中有哪些內建函式 help random.shuffle 檢視random.shuffle的用法 id a 獲取記憶體位址 chr 數字轉為ascii ord ascii轉為數字 isinstan...
python基礎 內建函式
print input len type open tuple list int bool set dir id str print locals 返回本地作用域中的所有名字 print globals 返回全域性作用域中的所有名字 global 變數 nonlocal 變數 迭代器.next ne...
Python基礎 內建函式
python 直譯器內建了很多函式和型別,我們可以在任何時候使用它們。內建函式 含義abs val 求val的絕對值 all iterable 如果可迭代物件中所有的元素為真那麼就返回true,否者返回false any iterable 如果可迭代物件中有乙個元素為真那麼就返回true,如果否則返...