map,filter,reduce函式介紹

2021-10-05 18:41:34 字數 2014 閱讀 8630

map,filter,reduce都是python自帶的內建函式,都是通過某個函式對序列進行計算而得出某種結果。需注意在python3中,reduce函式被封裝在functools類下。下面來分別介紹一下這三個函式的具體用法

map會用傳入的函式對序列中的每個值做對映。

比如序列為[x1,x2,x3…]

傳入函式為f(x)

map返回[f(x1),f(x2),f(x3)…]

在python2中,map會返回列表,在python3中,map會返回迭代器

>>> for i in map(lambda x:x**2,

[1,2,3]

): print(i) 1

49

如果傳入的函式引數不唯一,那麼map函式可以傳入和函式引數同數量的序列,會通過函式對每個序列中相同索引的值做對映

>>> for i in map(lambda x,y,z:x+y+z,

[1,2,3]

,[3,2,1]

,[1,2,3]

): print(i)56

7

如果傳入的多個序列長度不同,結果和最短的序列長度相同

>>> for i in map(lambda x,y,z:x+y+z,

[1,2,3]

,[3,2,1]

,[1,2]

): print(i) 5

6

若序列為空,則返回空

reduce中傳入的函式有且只能有兩個入參,reduce會先對序列中前兩個元素做對映,再依次將結果和下乙個元素在一起做對映,最終返回乙個元素

比如序列為[x1,x2,x3…]

傳入函式為f(x)

reduce返回[f(…f(f(x1,x2),x3)…)]

>>> functools.reduce(lambda x,y:x+y,

[1,2,3]

)6

reduce可以接收乙個初始引數,若該引數不為空,則reduce會首先將初始引數和序列中第乙個引數做對映

>>> functools.reduce(lambda x,y:x+y,

[1,2,3]

,4)10

若序列只有乙個元素且初始引數不為空,則會對該元素和初始引數做對映

>>> functools.reduce(lambda x,y:x+y+1,

[1],1)

3

若序列為空,且初始引數不為空,或序列只有乙個元素,且初始引數為空,則會返回該元素或初始引數,不會做對映

>>> functools.reduce(lambda x,y:x+y+1,

[1])

1>>> functools.reduce(lambda x,y:x*y,

,1)1

若序列為空且沒有初始引數,則會報錯

>>> functools.reduce(lambda x,y:x*y,

)traceback (most recent call last):

file ""

, line 1, in functools.reduce(lambda x,y:x*y,

)typeerror: reduce(

) of empty sequence with no initial value

filter會通過函式對序列進行篩選

filter傳入的函式只能接受乙個引數,並將函式計算出的結果轉化為布林值,若為真,則保留序列中對應的變數,否則篩選掉

和map相同,在python2中,filter會返回列表,在python3中,filter會返回迭代器

>>> for i in filter

(lambda x:x,

[0,1,2]

): print(i)

12

若序列為空,則返回空

map filter reduce函式的使用

1 篩選出大於30的數。const array 10,20,30,40,50,60,70,80 普通寫法 let newarray array.filter function k es6寫法 let newarray array.filter k k 30 console.log newarray ...

陣列函式array key exists的介紹

arr array a b c d print r array key exists 0 arr echo var dump array key exists 0 arr 用isset和array key exists來判斷 有什麼區別呢?1 isset 不是函式,是語法結構 而array key ...

Python datetime包函式簡單介紹

一 datetime包 上接 7內容 1.函式 datetime 1 用法 輸入乙個日期,來返回乙個datetime類 2 格式 datetime.datetime 年,月,日,hour minute second 其中hour,minute,second可選 3 附加類方法 today 返回本地當...