zip([iterable, ...])
zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。
若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓)。
一,把list使用zip創建一個元組對的列表
list1 = [1,2,3,4] list2 = [5,6,7,8] print zip(list1,list2) #輸出結果是 [(1, 5), (2, 6), (3, 7), (4, 8)]
二:利用for循環支持並行迭代
list1 = [1,2,3,4] list2 = [5,6,7,8] for (x,y) in zip(list1,list2): print (x,y, "==",x+y) # 輸出結果是: # (1, 5, '==', 6) #(2, 6, '==', 8) #(3, 7, '==', 10) #(4, 8, '==', 12)
三:把字符串轉換為元組的列表
當兩個字符串的長度不同時,zip會以最短序列的長度為准來截斷所得到的元組 列表
str1 = "abcd" str2 = "123456" print zip(str1,str2)
輸出結果是:[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
四:把元組轉換為元組的列表
t1 = (1,2,3) t2 = (4,5,6) t3 = (7,8,9) print list(zip(t1,t2,t3))
輸出結果是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
五:使用zip構造字典
方法一:使用for循環
k = ["a","b","c"] v = ["1","2","3"] d2 = {} for (k,v) in zip(k,v):d2[k]=v print d2
方法er:使用dict
k = ["a","b","c"] v = ["1","2","3"] d3 = dict(zip(k,v)) print d3
方法一和方法二的輸入結果都是 {'a': '1', 'c': '3', 'b': '2'}
六:矩陣的行列互換
第一種方法
有一個由列表描述的二維矩陣 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]]
第二種方法:
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print zip(*a) 輸出結果是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)] print map(list,zip(*a)) 輸出結果是:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們“行列互換”的效果,再通過對每個元素應用list()函數,將tuple轉換為list