(轉)Python函數式編程——map()、reduce()

來源:互聯網
上載者:User

標籤:迴圈   歸併   ges   加法   http   ima   code   src   元組   

轉自:http://www.jianshu.com/p/7fe3408e6048

1、map(func,seq1[,seq2...]) Python 函數式編程中的map()函數是將func作用於seq中的每一個元素,並用一個列表給出傳回值。如果func為None,作用通zip().
當seq只有一個時,將func函數作用於這個seq的每一個元素上,得到一個新的seq。

舉個例子來說明,(假設我們想要得到一個列表中數字%3的餘數,那麼可以寫成下面的代碼):

>>> print map(lambda x:x%3, range(6))>>> [0,1,2,0,1,2]>>> print [x%3 for x in range(6)]>>> [0,1,2,0,1,2]

當seq多於一個時,map都可以並行地對每個seq執行如所示的過程:

下面的例子是求兩個列表對應元素的積,可以想象,這是一種可能會經常出現的狀況,而如果不是用map的話,就要使用一個for迴圈,依次對每個位置執行該函數。

>>> print map(lambda x,y:x*y,[1,2,3],[4,5,6])>>> [4,10,18]#下面的代碼不止實現了乘法,也實現了加法,並把積與和放在一個元組中。>>> print map(lambda x,y:(x*y,x+y),[1,2,3],[4,5,6])>>> [(4,5),(10,7),(18,9)]#當func是None的時候,目的是將多個列表相同的位置的元素歸併到一個元組,在現在已經有了專用的函數zip()>>> print map(None,[1,2,3],[4,5,6])>>> [(1,4),(2,5),(3,6)]>>> print zip([1,2,3],[4,5,6])# 需要注意的是,不同長度的seq是無法執行map函數的,會出現類型錯誤

 

2、reduce( func, seq[, init] ) Python
reduce函數即為化簡,它是這樣一個過程:每次迭代,將上一次的迭代結果(第一次時為init的元素,如沒有init則為seq的第一個元素)與下一個元素一同執行一個二元的func函數。在reduce函數中,init是可選的,如果使用,則作為第一次迭代的第一個元素使用。
簡單來說,一個形象化的例子:

>>> reduce(func,[1,2,3]) = func(func(1,2),3)

舉個例子來說,階乘是一個常見的數學方法,Python中並沒有給出一個階乘的內建函數,我們可以使用reduce實現一個階乘的代碼:

>>> n=5>>> print reduce(lambda x,y:x*y,range(1,n+1))>>> 120#如果想要得到2倍的階乘的值,那麼就可以用到init這個選擇性參數了m=2n=5print reduce(lambda x,y:x*y,range(1,n+1),m)

 

(轉)Python函數式編程——map()、reduce()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.