「python」高階函數map、reduce的介紹

2020-12-17 梁家大叔
Python

map

先看官方介紹:

map(function, iterable, ...)Return an iterator that applies function to every item of iterable, yielding the results.

map函數至少使用2個參數:(函數,可迭代對象),返回的結果是個迭代器。實現的作用是將前面的函數依次在後面的可迭代對象上執行。

>>> def ljds(x):... return x+x...>>> a=[0,1,2,3,4,5,6,7,8,9]>>> b=map(ljds,a)>>> next(b)0>>> next(b)2>>> next(b)4>>> list(b)[6, 8, 10, 12, 14, 16, 18]>>>

代碼介紹:函數ljds,參數x,作用是返回一個x加上自己的值。ljds(2)結果是4,ljds('梁家大叔')結果是'梁家大叔梁家大叔'。很基礎,解釋的有點多餘....

a是個列表(可迭代對象)。當執行了3次next(b)後,(b是迭代器)此時的結果只有後面7個元素了,因此list(b)只輸出了3-9的ljds(x)。

map還可以接受更多的參數,但第一位的函數只有一個,後面可以繼續跟可迭代對象:

>>> def ljds(x,y):... return (x+x,y+y)...>>> a=[1,2,3,4,5]>>> b=[11,22,33,44,55]>>> c=map(ljds,a,b)>>> list(c)[(2, 22), (4, 44), (6, 66), (8, 88), (10, 110)]>>>

這個就沒必要解釋了。

reduce

官方介紹:

functools.reduce(function, iterable[, initializer])Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value.

值得一提的是reduce在python2中可以直接使用,在python3中已經放在了fucntools模塊裡,用之前要先導入。

reduce調用的函數需要兩個參數,依次使用可迭代對象的元素作為這個函數的參數,函數執行的結果和下一個元素再作為參數執行函數,依此類推。如果第一次執行時設置了initial,則是initial和第一個元素作為第一次執行的參數。可能容易暈,直接看代碼演示吧。

以前學過一篇課文是講數學家高斯的,他小時候做數學題,1+2+3……一直加到100,結果是多少,這題用reduce操作應該是這樣的:

>>> from functools import reduce>>> def ljds(x,y):... return x+y...>>> a=[x for x in range(101)]>>> reduce(ljds,a)5050>>>

代碼解釋:

導入reduce,創建一個函數ljds,需要2個參數x,y,返回x+y的結果。

a列表是數字從0到100,那麼reduce執行的結果就是:

第一次:因沒設置initial,所以ljds的參數就是列表a的最前面的2個元素,即0和1,相加結果是1。

第二次:第一次的結果1作為參數,第3個元素2也作為參數,即ljds(1,2),結果是3.

第三次:ljds(3,3)

……

一直到結束。

相關焦點

  • python高階函數:map、filter、reduce的替代品
    什麼是高階函數?高階函數是一種將函數作為參數,或者把函數作為結果返回的函數,map函數、sorted函數就是高階函數的典型例子。map函數在小編以前的文章中做過相應的知識分享。sorted函數是python的內置函數,它的可選參數key用於提供一個函數,它可以將函數應用到各個元素上進行排序。
  • 「 JS-三個高階函數filter-map-reduce 」
    前言: JS-三個高階函數filter-map-reduce,需要掌握,很好用,真香警告。filterfilter 有過濾的意思filter(參數) 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。
  • 一文讀懂python的map、reduce函數
    這對兄弟是出現頻率極高且相當實用的python函數,初學者會較難理解,看完本文你就能搞定它們嘍!如何使用map函數?= list(map(lambda x: x**2, items))上面使用了匿名函數,也可以自定義函數:items = [1, 2, 3, 4, 5]def f(x): return x**2squared = list(map(f, items))reduce相比map稍複雜點
  • Python入門基礎之map()、reduce()函數使用
    本文環境都是基於python3.X的,畢竟要學會擁抱未來,擁抱新的知識。Python3 現在已經發展的差不多了。1、 map()函數map()是 python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的object並返回。
  • Python基礎教程——高階函數
    Python的高階函數,就是map、filter、reduce,說它們是高階函數,只是因為我們平時用的少,所以理解起來也有點費勁,事實上,它們功能很強大,也很好用易用。一起來看看吧。平方函數例1:多個數字組成的一個列表,我們想要對每個數字都乘以2,雖然使用for循環也能完成,但是明顯太繁瑣,使用map這個高階函數,就簡單多了。代碼如下:
  • Python基礎應用:map與reduce
    map()和 reduce() 函數的設計靈感就來源於函數式編程的思想。簡單講,函數式編程的主要思想是儘量將運算過程編寫成一系列的嵌套函數。 map() 和 reduce() 都是Python內置的高階函數。所謂高階函數,即以函數作為輸入參數或輸出結果的函數,map() 和 reduce()的共同特徵是以函數作為傳入參數。
  • python高階函數學習, map、reduce
    函數map():map()函數接收兩個參數,一個是函數,一個是Iterable, map把函數作用於序列的每一個元素,並把結果作為Iterator返回。注意,返回的是生成器Iterator,所以取返回值的時候需要用for,或者next,或者通過list序列化之後才能取出來舉例:def f(x): return x * x #定義一個函數f(x),返回值是兩個數的乘積r = map(f, [1, 2, 3, 4, 5, 6]) #通過map函數讓f(x)作用於後面序列的每一個元素
  • Python 進階之術 Map Filter Reduce
    這是它的規範:規範map(function_to_apply, list_of_inputs)⼤多數時候,我們要把列表中所有元素⼀個個地傳遞給⼀個函數,並收集輸出。就是這樣:items = [1, 2, 3, 4, 5]squared = list(map(lambda x: x**2, items))⼤多數時候,我們使⽤匿名函數(lambdas)來配合 map不僅⽤於⼀列表的輸⼊, 我們甚⾄可以⽤於⼀列表的函數
  • 在Python中使用Reduce函數
    但是,它提供了一些提供函數式編程風格的工具。其中一些工具包括 map()、 filter()和 reduce()函數。在文中,我們將探索reduce()函數並闡明其提供的多功能性和實用性。使用for循環介紹reduce()函數的最好的方式是從實際問題入手,並嘗試用老式的方法解決它,即使用for循環。然後我們可以使用reduce函數嘗試解決相同的問題。假設我們有一個數字列表,我們希望將列表中的所有數字相乘,然後返回乘積。
  • Python編程技巧:如何用Map, Filter, Reduce代替For循環?
    map、filter 和 reduce 這三種技術可以提供描述迭代原因的函數替代方案,以便避免過多的 for 循環。我之前在 JavaScript 中寫過這些技術的入門文章,但是它們在 Python 中的實現略有不同。
  • 詳解Python函數式編程之map、reduce、filter
    map()、reduce()、filter()是Python中很常用的幾個函數,也是Python支持函數式編程的重要體現。
  • 寫Python 代碼不可不知的函數式編程技術
    頭等函數在 Python 中,函數是「頭等公民」(first-class)。也就是說,函數與其他數據類型(如 int)處於平等地位。因而,我們可以將函數賦值給變量,也可以將其作為參數傳入其他函數,將它們存儲在其他數據結構(如 dicts)中,並將它們作為其他函數的返回值。
  • 寫 Python 代碼不可不知的函數式編程技術
    本文作者是新加坡國立大學計算機學院和「USP」博學計劃學生 Raivat Shah,專注於編程與數據研究。在 Python 中,函數是「頭等公民」(first-class)。也就是說,函數與其他數據類型(如 int)處於平等地位。因而,我們可以將函數賦值給變量,也可以將其作為參數傳入其他函數,將它們存儲在其他數據結構(如 dicts)中,並將它們作為其他函數的返回值。
  • python3 map、reduce、filter 的區別
    ,使用的就是 map、reduce、filter 這樣的高階函數(遍歷序列):接收兩個參數,一個是函數,一個是 Iterable,map 將傳入的函數依次作用到序列的每個元素,並把結果作為新的 Iterator 返回
  • 一文看懂Python列表表達式及高階函數如lamda, zip, enumerate, map和filter方法.
    深入了解和熟練使用python的列表表達式和內置的一些高階函數如lamda, zip, enumerate, map, filter, reduce
  • 【Python基礎】Python 函數使用總結
    9 高階函數可以用來接收另一個函數作為參數的函數叫做高階函數。如下f有一個參數g,而g又是函數,所以f是高階函數:def f(g):    g()Python 中經常會遇到高階函數,今天介紹幾個內置的常用的高階函數。
  • 白話 Python 的函數式編程
    Python 主要提供了這麼幾個函數 Map, Filter 和 Reduce,通常結合匿名函數 lambda 一起使用,我逐一介紹一下:對於 Map(function, iterable) 函數,前面的例子提過,他表示對 iterable 中的每個元素運用 function 這個函數,最後返回一個新的可遍歷的集合,比如上面對列表中每個元素乘2用map可以表示為
  • JavaScript 關於map,reduce函數的一些思考
    map函數與reduce函數屬於函數式編程,通俗點說,可以把函數作為參數或返回值自由傳遞。
  • 如何用Map、Filter和Reduce替換Python For循環?
    在Python中,這三種技術易函數的形式存在,而不是Array或String類的方法。這意味著要寫成map(function, my_list)而不是my_array.map(function)。此外,每個技術都需要傳遞函數,該函數會被每個項執行。
  • Python中的map函數
    軟硬體環境anaconda3 with python 3.7簡介map是python中的一個內置函數