先看filter()方法
print(list(filter(lambda n : n % 2 == 1, range(20))))
# 結果 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
這裡如果用filter的話,說明匿名函式lambda給出的是個篩選條件,從1到19中篩選出奇數來。
filter將傳入的函式依次作用到序列的每個元素,True則返回 False則不返回。
再看map()方法
print(list(map(lambda n : n % 2 == 1, range(20))))
# 結果 [False, True, False, True, False, True, False, True, False,
True, False, True, False, True, False, True, False, True, False, True]
用map的話,就好像變成了它判斷對錯的條件,只打印true和false。
print(list(map(lambda x: x + 1, range(10))))
# 結果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
map一般的用法,引數有一個函式一個序列,將右邊的序列經過左邊的函式變換,生成新的序列。
最後看reduce()方法
reduce是一個累加函式,這個函式必須接收兩個引數,reduce把結果繼續和序列的下一個元素做累積計算。
這個函式並不是很常用,在python3中已將其從全域性空間移除。
現被放置在functools的模組裡,用之前需要引入 from functools import reduce
from functools import reduce my_reduce = reduce(lambda x, y: x + y, range(10))
print(my_reduce)
# 結果是45 是將0到9相加
reduce的另外一個用法,列表去重
ids = [1,4,3,3,4,2,3,4,5,6,1]
func = lambda x,y:x if y in x else x + [y]
reduce(func, [[], ] + ids)