[Python] zip 函數小筆記
zip 將 iterables 的元素進行配對,儲存在回傳的序對中,回傳的是 tuple:
a = "abcde"
b = (1, 2, 3, 4, 5)
c = [6, 7, 8, 9, 0]
d = zip(a, b, c)
# d: [('a', 1, 6), ('b', 2, 7), ('c', 3, 8), ('d', 4, 9), ('e', 5, 0)]
簡單的應用,但有時用起來很厲害。
例如 leetcode 048: Rotate Image 這篇,要將圖片做順時針90度旋轉,要先上下對稱交換,再斜線交換:
/*
* clockwise rotate
* first reverse up to down, then swap the symmetry
* 1 2 3 7 8 9 7 4 1
* 4 5 6 => 4 5 6 => 8 5 2
* 7 8 9 1 2 3 9 6 3
*/
如果正常寫法的話,大概是:
def rotate(self, matrix):
n = len(matrix)
matrix.reverse()
for i in xrange(n):
for j in xrange(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
但如果用 zip
的話,非常的精簡:
def rotate(self, A):
A[:] = zip(*A[::-1])
或也可以套個 list 讓他不是 tuple:
def rotate(self, A):
A[:] = map(list, zip(*A[::-1]))