Python內(nèi)置了一些非常有趣、有用的函數(shù),如:filter、map、reduce,都是對一個(gè)集合進(jìn)行處理,filter很容易理解用于過濾,map用于映射,reduce用于歸并. 是Python列表方法的三架馬車。
1. filter函數(shù)
的功能相當(dāng)于過濾器。調(diào)用一個(gè)布爾函數(shù)bool_func來迭代遍歷每個(gè)seq中的元素;返回一個(gè)使bool_seq返回值為true的元素的序列。
>>> N=range(10) >>> print filter(lambda x:x>5,N) [6, 7, 8, 9]
2. map函數(shù) func作用于給定序列的每個(gè)元素,并用一個(gè)列表來提供返回值。
>>> N1=[1,2,3] >>> N2=[6,5,4] >>> map(lambda x,y:x+y,N1,N2) [7, 7, 7] >>> map(lambda x:x+3,N1) [4, 5, 6]
3. reduce函數(shù) ,func為二元函數(shù),將func作用于seq序列的元素,每次攜帶一對(先前的結(jié)果以及下一個(gè)序列的元素),連續(xù)的將現(xiàn)有的結(jié)果和下一個(gè)值作用在獲得的隨后的結(jié)果上,最后減少我們的序列為一個(gè)單一的返回值。
>>> N=range(1,101) >>> reduce(lambda x,y:x+y,N) 5050
例1:用map和reduce實(shí)現(xiàn)5的階乘相加(5!+4!+3!+2!+1!)
>>>print reduce(lambda x,y:x*y,range(1,6)) >>>print reduce(lambda x,y:x*y,range(1,5)) >>>print reduce(lambda x,y:x*y,range(1,4)) >>>print reduce(lambda x,y:x*y,range(1,3)) >>>print reduce(lambda x,y:x*y,range(1,2)) '''
結(jié)果為
120 24 6 2 1 '''
#把上一步的結(jié)果變成一個(gè)階乘列表
>>>print map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6)) [1, 2, 6, 24, 120]
#最后把階乘列表相加,第一題解決
>>>print reduce(lambda m,n:m+n,map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6))) 153
例2:用filter將100~200以內(nèi)的質(zhì)數(shù)過濾出來
質(zhì)數(shù)又稱素?cái)?shù)。指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)
>>>filter(lambda N:len(filter(lambda M:N%M==0,range(2,int(N**0.5)+1)))==0,range(100,201))
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
