這什麼鬼 -- python3 zip 函數

Posted by summer on September 2, 2021

這什麼鬼 系列紀錄一些寫程式途中所遇到的問題,一些我不熟的語法和陌生的函數會被記錄在這,避免忘記

語法

1
zip(*iterables)

Returns an iterator of tuples

說明

zip 函數可以把數個可迭代的對象打包成數個 tuple 的迭代,長度由最短的對象所決定,剩下的會被拋棄。

可以用 * 符號反運算。

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> a = [1,2,3]
>>> b = [9,8,7,6]
>>> zipped = zip(a,b)
>>> zipped
<zip object at 0x000001E95A8DB0C0>
>>> zz = list(zipped)
>>> zz
[(1, 9), (2, 8), (3, 7)]
>>> c ,v = zip(*zz)
>>> c
(1, 2, 3)
>>> v
(9, 8, 7)

小運用

行列互換

1
2
3
>>> a = [(1,2,3),(4,5,6),(7,8,9)]
>>> list(zip(*a))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]