Map 將一個 list 轉換成另一個 list,item 數不變,但每個 item 變了,就像一對一的轉換。
Filter 將一個 list 過濾成另一個 list,重點是 item 數變少了,一般狀況下 item 不會改變,可以改變是加分。
Reduce 掃過整個 list,得出單一個結果,例如累加。
這功能在 Python 叫做 List Comprehensions。
List Comprehensions
t = ['Apple', 'BANANA', 'guava'] print(t) # ['Apple', 'BANANA', 'guava'] # map,一對一轉換 print([ s.upper() for s in t ]) # ['APPLE', 'BANANA', 'GUAVA'] # filter,不只可以過濾,還可以轉換 print([ s.upper() for s in t if s.isupper()]) # ['BANANA'] # reduce,還是沒找到
語法
[ 加工 a 與 b for a in t1 if 符合這個條件 for b in t2 if 符合那個條件...]
List Comprehensions 有一個特色是變數在定義前呼叫使用。
- 中括號,就是一個 list 物件
- 處理變數,表示要回傳什麼
- for 變數 in 某個 sequence 或 iterable,可以有 N 個 for,就會有 N 個變數
- if 符合某個條件,可以有 N 個 if
範例
可以回傳複雜的物件。print([ (x, x**2) for x in range(5) ]) # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]可以使用多個變數(for)。
print([ (x, y) for x in range(3) for y in range(3) if x != y]) # [(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]甚至使用多個條件(if)。
print([ (x, y) for x in range(4) if x % 2 == 0 for y in range(4) if y % 2 == 1]) # [(0, 1), (0, 3), (2, 1), (2, 3)]說穿了這些功能都可以用 for 作到,包括 Reduce,但簡潔的語法看起來就比較厲害一點。
官方文件
---
---
---
沒有留言:
張貼留言