簡述Python中filter、map、reduce函數


概述

map filter

  • python 3 中,map和filter返回生成器,因此他們的直接替代品是生成器表達式;
  • Python 2中,這兩個函數返回的是列表,直接替代品是列表推導式;
  • filter是用於過濾的生成器函數,map是用於映射的生成器函數;即:
    filter中的函數返回的是原可迭代對象進行篩選后的結果,map函數返回的是重新創建的新的可迭代對象。

reduce

  • Python 2 中,reduce是內置函數;
  • Python 3中,reduce放到了functools模塊中了;
  • 該函數最常用於求和,但Python2.3以后,求和來說,內置函數sum在可讀性和性能方面更優。

filter(function, iterable)

function 函數名
iterable 可迭代對象

filter中的函數返回布爾值,可迭代對象通過迭代,將元素傳入函數,通過函數返回的布爾值來判斷該元素是保留還是丟棄。

In [178]: def a(item):
...: return item - 2

In [179]: list(filter(a,range(5)))
Out[179]: [0, 1, 3, 4]

map(function,it1, ,[it2,…,itN])

function 函數名
it 可迭代對象

  • 通過迭代,將元素傳入函數,經過函數處理后,將函數的返回值放入到新的可迭代對象中;
  • 調用map函數的結果是是重新創建並返回了新的可迭代對象;
  • map可以接收多個可迭代對象,如果傳入n個,那么func必須可以接受n個參數,而且要並行處理各個可迭代對象。

python 2 中使用map函數效率低些,因為map函數要使用結果構建一個列表;
在Python 3 中,map函數是惰性的,它會創建一個生成器,按需產出結果,因此能節省內存。

In [172]: list(map(lambda x:x+5,range(5)))
Out[172]: [5, 6, 7, 8, 9]
In [171]: list(map(lambda x,y:x+y,range(5),range(5)))
Out[171]: [0, 2, 4, 6, 8]

reduce(function, iterable, [initial])

function 函數名
iterable 可迭代對象
initial 如果提供了initial,把它當做第一個元素傳入

與map不同的是,reduce里的函數必須傳入兩個形參,並且會把上一個元素在函數執行的結果累積到下一個元素。

In [174]: from functools import reduce

In [176]: ret = reduce(lambda x,y:x+y,range(5))

In [177]: print(ret)
10


In [199]: ret2 = reduce(lambda x,y:x+y,range(5),10)

In [200]: print(ret2)
20

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com