python之高階函式map,reduce,filter用法

笨拙的石頭發表於2018-08-11

高階函式的使用能夠極大地簡化python演算法的複雜度(主要是逼格高了!!)。好了,不廢話,直接看用法。

map函式

---它是將傳入的函式依次作用到序列的每個元素上,並把結果作為新的Iterator返回。

舉例說明:

# map函式
testList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def square(x):
    return x * x
list1 = list(map(square, testList))
print(list1)

 這樣,大家就很容易看出來map的用法了吧。

哦,對了,這裡要注意的一小點問題是:在使用map進行對映的時候,傳入的函式只寫函式名square,不需要傳入引數值x。

filter函式

---從某種意義上來講,filter函式和map函式很類似,他們都是將函式作用於給定序列的每一個元素上。但是,filter和map的不同點在於哪裡呢??我們先來看下面的一個簡單的例子。

# filter
testList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def is_odd(x):
    return x % 2 == 1
list2=list(filter(is_odd,testList))
print(list2)

 返回值為[1, 3, 5, 7, 9]

那麼,我們可以將filter函式的作用總結為:

filter()把傳入的函式依次作用於給定序列的每個元素上,然後根據函式的返回值(True or False)決定保留還是丟棄該元素。最終輸出的是符合傳入函式的要求的值。

reduce函式

 reduce函式和map,filter都不同。它每次傳入2個引數,並將這兩個引數傳入函式中。然後將得到的值作為第一個引數,再傳入一個新的引數,繼續進行下一步的運算,直至引數全部傳入過停止。

看下面的例子可能更好理解:

from functools import reduce
testList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def add(x,y):
    return 10*x+y
list3=reduce(add,testList)
print(list3)

得到的返回值為123456789。

這裡我們可以將reduce函式的功能進一步總結為:這個函式必須接收兩個引數,reduce把結果繼續和序列的下一個元素做累積計算,直到引數全部傳入過停止。

好了,高階函式就說到這裡了,如有問題,可以留言,大家一起討論,共同進步!!

相關文章