python如何理解map,reduce,filter?


通俗的說..都是用在一堆數據(比如一個列表)上..

map是用同樣方法把所有數據都改成別的..字面意思是映射..

比如把列表的每個數都換成其平方..

reduce是用某種方法依次把所有數據丟進去最後得到一個結果..字面意思是化簡..

比如計算一個列表所有數的和的過程,就是維持一個部分和然後依次把每個數加進去..

filter是篩選出其中滿足某個條件的那些數據..字面意思是過濾..

比如挑出列表中所有奇數..

&>&>&> map(lambda x:x*x,[0,1,2,3,4,5,6])
[0, 1, 4, 9, 16, 25, 36]
&>&>&> reduce(lambda x,y:x+y,[0,1,2,3,4,5,6])
21
&>&>&> filter(lambda x:x1,[0,1,2,3,4,5,6])
[1, 3, 5]

嘛..如果題主這麼問是因為覺得有點混淆想要區分的話..

簡單來講..都是處理一堆數據..然後看輸出數據的數量..

原先有多少map完後還是有多少..

原先不管有多少reduce後都只剩一個結果..

filter完則是原先的一部分,也許全都還在,也許全都沒了,反正個數不定..但是剩下的那些也都是原先有的..


這些概念其實來自於Haskell,建議你有空學習一下Haskell,到時候就會明白了。


map就是對列表(迭代器, 生成器等)每一個元素做某個事情.

比如你有7個葫蘆娃, 你讓每個葫蘆娃 調戲一下 蛇精. 這個就是map, 攜程代碼就是

map(lambda x: 調戲蛇精, 葫蘆娃列表)

reduce是對列表(迭代器, 生成器等)的每個元素應用某個規則, 合併成一個值

比如你還是有7個葫蘆娃, 你覺得一個人帶7個娃太累了, 於是讓它合併成一個金剛葫蘆娃, 這個就是reduce, 寫成代碼就是

reduce(lambda x,y: 合併, 葫蘆娃列表)

filter, 就是對列表(...)的每個元素, 按照某個規則予以判斷, 把判斷結果為正的留下.

比如你依然有7個葫蘆娃, 你看著陽台上的一盆葫蘆的盆栽快枯萎了, 想著要給它澆水. 這時, 你需要水娃給這個盆栽吐吐口水, 於是你做了一個Filter, 把水娃給叫過來來澆水. 寫成代碼就是:

filter(lambda x: 會吐口水的娃, 葫蘆娃列表)


map reduce filter都是高階函數,可以接受某個函數作為參數

map是映射,ruduce是歸納,filter是過濾

看看這個你就懂了:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317852443934a86aa5bb5ea47fbbd5f35282b331335000

filter在下一章


推薦閱讀:

快速計算斐波那契數列fibonacci(n)
Pandas 教程——電影數據是乾淨的嗎(2)
Python從零開始系列連載(16)——Python程序的基本控制流程(下)
【Python3網路爬蟲開發實戰】1.4.1-MySQL的安裝
Python小白想爬取網路數據?

TAG:Python | Python入門 |