2017-05-15

Java 腦袋學 Python Zip(與 enumerate())

Zip 又是一個對 Java 陌生的概念。

Zip 可以接受兩個以上的  sequence,然後回傳一個 iterator of tuple,像拉鍊一樣把 sequence 裡每個 item 鍊在一起變成一個 tuple,以最短的 sequence 為準。
z = zip('Python', range(3))
print(z) # <zip object at 0x03D47AD0>
for t in z:
    print(t)
# ('P', 0)
# ('y', 1)
# ('t', 2)
zip 回傳的 zip 物件是一個 iterator 物件,可以用 for-in 讀取每個 item(tuple),不同於 list-like 的地方在於不能用中括號 [N] 讀取指定的 item,也不可以用 list() 轉成 list物件,list() 吃的是 iterable 物件,不是 iterator 物件。

可以搭配多重指定(Tuple assignment)與 for-in 來讀取 Zip 物件。
z = zip('Python', range(9))
for a, b in z:
    print(a, b)
# P 0
# y 1
# t 2
# h 3
# o 4
# n 5

enumerate()

Python 還有一個便捷的函式可以同時取得 sequence 裡的 item 與 index。
for index, item in enumerate('Python'):
    print(index, item)
# 0 P
# 1 y
# 2 t
# 3 h
# 4 o
# 5 n
---
---
---

沒有留言:

張貼留言