python的映射_Python学习:映射函数(map)和函数式编程工具(filter和reduce)
在序列中映射函數(shù)map
map函數(shù)會(huì)對(duì)一個(gè)序列對(duì)象中的每一個(gè)元素應(yīng)用被傳入的函數(shù),并且返回一個(gè)包含了所有函數(shù)調(diào)用結(jié)果的一個(gè)列表。
例1:def?sum(x):
return?x?+?10
L1?=?[1,2,3,4,5,6,7]
L?=?map(sum,?L1)
#結(jié)果為[11,?12,?13,?14,?15,?16,?17]
map還有更高級(jí)的使用方法,例如提供了序列作為參數(shù),它能夠并行返回分別以每個(gè)序列中的元素作為函數(shù)對(duì)應(yīng)參數(shù)得到的結(jié)果的列表。如例2所示。
例2:def?sum(x,?y):
return?x?+?y
L1?=?[1,2,3,4,5,6]
L2?=?[10,11,12,13,14,15]
print?map(sum,?L1,?L2)
#結(jié)果為[11,?13,?15,?17,?19,?21]
注意:map調(diào)用與列表解析很相似,但是map對(duì)每一個(gè)元素都應(yīng)用了函數(shù)調(diào)用而不是任意的表達(dá)式。因?yàn)檫@點(diǎn)閑置,從某種意義上來(lái)說(shuō),它成為了一個(gè)不太通用的工具,盡管如此,在某些情況下,目前map比列表解析運(yùn)行起來(lái)更快。它也比f(wàn)or循環(huán)更快。
函數(shù)式編程工具(filter和reduce)
map函數(shù)是Python用來(lái)進(jìn)行函數(shù)式編程的這類工具中最簡(jiǎn)單的內(nèi)置函數(shù)代表:函數(shù)式編程的意思就是對(duì)應(yīng)序列應(yīng)用一些函數(shù)的工具。例如,基于某一側(cè)式函數(shù)過(guò)濾出一些元素(filter),以及對(duì)每對(duì)元素都應(yīng)用函數(shù)并運(yùn)行到最后結(jié)果(reduce)。由于range和filter都返回可迭代對(duì)象,在Python3.0中,它們需要list調(diào)用來(lái)顯示其所有結(jié)果。
序列中的元素若其返回值為真的話,將會(huì)被鍵入到結(jié)果的列表中。就像map,這個(gè)函數(shù)能夠用for 循環(huán)來(lái)等效,但是它是內(nèi)置的,運(yùn)行起來(lái)比較快。L?=?range(-10,10)
print?filter(lambda?x:x>4,?L)
#結(jié)果為[5,?6,?7,?8,?9]
序列中的元素若其返回值為真的話,將會(huì)被鍵入到結(jié)果的列表中。就像map,這個(gè)函數(shù)能夠用for 循環(huán)來(lái)等效,但是它是內(nèi)置的,運(yùn)行起來(lái)比較快。res?=?[]
for?x?in?range(-10,10):
if?x?>5:
res.append(x)
print(res)
#結(jié)果為[5,?6,?7,?8,?9]
reduce在Python2.6中只是一個(gè)簡(jiǎn)單的內(nèi)置函數(shù),但是在Python3.0中則位于functools模塊中,要更復(fù)雜一些。>>>reduce((lambda?x,y:?x+y),?[1,2,3,4,5])
15
>>>reduce((lambda?x,y:?x*y),?[1,2,3,4,5])
120
總結(jié)
以上是生活随笔為你收集整理的python的映射_Python学习:映射函数(map)和函数式编程工具(filter和reduce)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python与或非位运算_python位
- 下一篇: python导入同目录下的模块_如何从同