Python基礎——zip
0. zip 的特殊情況
-
不等長:
a = range(3) b = range(5) >> list(zip(a, b)) [(0, 0), (1, 1), (2, 2)]
-
zip(*)
*
對其作用的物件進行 unpack,拆包;
l = [[1, 2, 3], [4, 5, 6]] >> list(zip(l)) [([1, 2, 3],), ([4, 5, 6],)] >> list(zip(*l)) [(1, 4), (2, 5), (3, 6)]
1. 兩層迴圈與 zip 的一一對應
[(i, j) for i in x for j in y]
也即:
l = []
for i in x:
for j in y:
l.append((i, j))
表達的是一種笛卡爾積的關係。那麼如何實現一一對應呢,這時就需要zip操作了:
>>> [(i, j) for i, j in zip(x, y)]
[(0, 'a'),
(1, 'b'),
...
(24, 'y'),
(25, 'z')]
2. meshgrid
不由得讓人聯想起meshgrid函式,我們要實現`[0, 1, 2, 3, 4, 5][0, 1, 2, 3, 4, 5]網格的整數節點位置:
>>> [Y, X] = np.meshgrid(range(0, 6), range(0, 6))
>>> Y
array([[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]])
>>> X
array([[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3],
[4, 4, 4, 4, 4, 4],
[5, 5, 5, 5, 5, 5]])
for x in range(0, 6):
for y in range(0, 6):
x - y
便可轉換為矩陣化的做法:
X-Y
3. 二元tuple元素前後的調換
我們再次回到zip本身,如何實現一個list(tuple)前後元素的調換再集合:
[1, 2, 3, 4, 5] -> [(2, 1), (3, 2), (4, 3), (5, 4)]
對一個list做兩次索引再zip:
>>> l = [1, 2, 3, 4, 5]
>>> [(j, i) for i, j in zip(l[:-1], l[1:])]
[(2, 1), (3, 2), (4, 3), (5, 4)]
相關文章
- Linux基礎命令---zipLinux
- Python基礎篇-Python基礎01Python
- Python基礎筆記01-Python基礎Python筆記
- python基礎中的基礎Python
- Python 基礎 (-)Python
- Python基礎Python
- python 基礎Python
- Python基礎:語法基礎(3)Python
- Python基礎面試題30問!Python基礎教程Python面試題
- Python基礎—字串Python字串
- python基礎12Python
- Python_基礎Python
- Python基礎一Python
- Python基礎篇Python
- 03 - Python 基礎Python
- python基礎題Python
- python基礎3Python
- Python列表基礎Python
- 【Python基礎】字典Python
- python基礎概念Python
- python基礎操作Python
- python基礎(五)Python
- python基礎(一)Python
- Python基礎教程Python
- Python基礎(下篇)Python
- Python基礎之四:Python3 基礎資料型別Python資料型別
- Python基礎:編碼Python
- python基礎學習Python
- Python 基礎概覽Python
- Python基礎:dict & setPython
- python多程式基礎Python
- Python基礎語法Python
- python基礎內容Python
- Python:基礎&爬蟲Python爬蟲
- Python基礎教程.18214570Python
- python基礎知識Python
- Python基礎03 序列Python
- Python 基礎 2 - 列表Python
- python 基礎 迴圈Python