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 返回本地當...