<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文重點介紹Python中的三個特殊函數Map,Filter和Reduce,以及如何使用它們進行程式碼程式設計。在開始介紹之前,我們先來理解兩個簡單的概念高階函數和Lambda函數。
把函數作為引數傳入,這樣的函數稱為高階函數,函數語言程式設計就是指這種高度抽象的程式設計正規化。
舉例如下:
def higher(your_function, some_variable): return your_function(some_variable)
實質上,函數map,filter和reduce均為高階函數,它們的輸入引數為函數和可迭代物件(list,tumple等),具體形式如下:
map(your_function, your_list) filter(your_function, your_list) reduce(your_function, your_list)
Lambda 函數類似於普通的 Python 函數,區別在於我們必須為普通函數命名,但對於 lambda 函數,它是可選的。
具體語法如下:
lambda inputs: output
接下來,讓我們看一下幾個普通函數及其 lambda 函數等效實現,如下:
def multiply2(x): # is the same as return x * 2 multiply2 = lambda x: x*2 # lambda function
另一個例子如下:
def add(a, b): # is the same as return a + b add = lambda a,b: a+b # lambda function
Map 用於迭代可可迭代物件中的每個元素進行相應的轉換操作。 例如,通過將 [1,2,3]
中的每個元素乘以 2,將 [1,2,3]
變換為 [2,4,6]
。 為此,我們需要一個lambda函數,該函數用於實現將單個元素乘2的操作,如下:
before = [1,2,3] after = list(map(lambda x:x*2, before)) # after is [2,4,6]
此外,我們在看下個範例,主要用於將字串所有字元轉換為大寫形式。
如下:
before = ["apple", "orange", "pear"] after = list(map(lambda x:x.upper(), before)) # after is ["APPLE", "ORANGE", "PEAR"]
需要注意的是,雖然上述 lambda 函數中使用變數 x,但只要它是有效的變數名稱,我們可以更換為任何我們想要取的變數名稱。
過濾器用於可迭代,以僅保留滿足特定條件的某些元素。例如,僅將奇數保留在 [1,2,3,4,5,6] 內並得到 [1,3,5]。在這裡,我們需要一個lambda函數,它接受一個數位,如果數位是奇數,則返回True,否則返回False。
函數Filter主要功能為對於根據特定過濾條件來從可迭代物件中的選擇相應的元素。舉例,對於列表[1,2,3,4,5,6]
,如果我們想要過濾得到其中的奇數數元素。我們可以實現一個lambda函數,當引數為奇數時為True,否則為False。
程式碼如下:
before = [1,2,3,4,5,6] after = list(filter(lambda x:x%2==1, before)) # after is [1,3,5]
在舉個栗子,實現只保留字串長度大於等於5的,即將列表[“apple”,“orange”,“pear”]
轉換為[“apple”,“orange”]
。此時我們可以實現一個lambda函數,接收一個字串,如果該字串的長度大於等於5,則返回True,否則為False。 程式碼如下:
before = ["apple", "orange", "pear"] after = list(filter(lambda x:len(x)>=5, before)) # after is ["apple", "orange"]
函數Reduce主要用於以某種方式來組合可迭代物件中的所有元素。 與函數map
和filter
不同,我們需要單獨引入 reduce
,如下所示:
from functools import reduce
此外,reduce中使用的lambda函數需要兩個引數,它主要用於告訴我們如何將兩個元素組合成起來。舉個栗子,假如我們需要將列表[1,2,3,4,5]
中的所有元素進行相乘得到數位120
,這裡我們需要實現的lambda函數就是接收兩個數位,並將他們相乘。 程式碼範例如下:
from functools import reduce before = [1,2,3,4,5] after = reduce(lambda a,b: a*b, before) # after is 120
另外一個例子,如果我們需要使用-
來將字串連線起來。具體為將列表["apple", "orange", "pear"]
變成"apple-orange-pear"
。這裡,我們需要實現一個lambda函數,它接受2個字串,並將它們用一個-
字元相加。
程式碼實現如下:
from functools import reduce before = ["apple", "orange", "pear"] after = reduce(lambda a,b: a+"-"+b, before)
本文從高階函數和Lambda函數入手,先後介紹了Map,Filter和Reduce三個高階函數的用法,並給出了相應的程式碼範例。
到此這篇關於一文詳解Python中的Map,Filter和Reduce函數的文章就介紹到這了,更多相關Python Map,Filter,Reduce內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45