<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天的這一章節我們來學習一下,Python 中的三個高階函數,也被稱之為 魔法函數。之所以把他們交的這麼高階,主要是因為它們返回的資料型別多數是 迭代器。
我們在上一章節有介紹過,迭代器 可以提升我們的程式碼的執行效率、降低記憶體消耗。所以接下來我們就認識一下這些 魔法函數。
filter() 函數 是python的一個內建函數。
filter() 函數的功能:可以將一個可遍歷的物件根據過濾條件,生成一個迭代器。(在python2.7版本,返回的是列表)
filter() 函數的使用方法:
用法:
filter(function, list)
引數介紹:
function:對list的每個item進行條件過濾的定義(主要對第二引數的每個成員進行判斷,滿足函數的要求,將會進入 filter 生成的迭代器)
list:需要過濾的列表 (其實這裡不一定只可以放列表,放入的是可迭代物件)
演示案例如下(過濾出列表中的所有偶數):
def is_even(n): return n % 2 == 0 newlist = filter(is_even, [1, 2, 3, 4, 5, 6]) print(newlist, type(newlist)) # >>> 執行結果如下: # >>> <filter object at 0x7fb241492310> <class 'filter'> for i in newlist: print(i) # >>> 執行結果如下: # >>> 2 # >>> 4 # >>> 6
PS:需要注意的是,這裡的非偶數,雖然會被過濾函數拋棄,但是依然會存在於之前的列表中。
map() 函數 是python的一個內建函數。
map() 函數的功能:對列表中的每一個成員依次執行函數進行判斷,將執行的結果放到新 list 中,返回一個 map 對應的物件。
map() 函數的使用方法:
用法:
map(function, list)
引數介紹:
function:對 list 每個 item 進行條件滿足的判斷
list:需要過濾的列表 (其實這裡不一定只可以放列表,放入的是可迭代物件)
演示案例如下(對列表中的每一個成員判斷是否大於1):
result = map(lambda x: x>1, [0, 1, 2, 3]) print(result, type(result)) # >>> 執行結果如下: # >>> <map object at 0x7facfa399e80> <class 'map'> for i in result: print(i) # >>> 執行結果如下: # >>> False # >>> False # >>> True # >>> True
reduce() 函數 以前是python的一個內建函數,現在不是了。(在python 2.x版本的時候,reduce() 函數可以直接被呼叫;但是在 python 3.x 的版本中,由於返回的不是一個迭代器,所以需要先執行匯入然後才可以繼續使用。匯入語句 from functools import reduce)
reduce() 函數 的功能:對迴圈前後的兩個資料進行累加或者累乘。(實際上可以通過 lambda 對這兩個成員進行任何的處理)
reduce() 函數的使用方法:
用法:
reduce(function, list)
引數介紹:
function:對資料累加/累成的函數
list:需要過濾的列表 (其實這裡不一定只可以放列表,放入的是可迭代物件)
演示案例如下(對迴圈前後的兩個資料進行累加或者累乘):
from functools import reduce result = reduce(lambda x, y: x + y, [1, 2, 3]) print(result, '---', type(result)) # >>> 執行結果如下: # >>> 6 --- <class 'int'> from functools import reduce result = reduce(lambda x, y: x * y, [1, 3, 5]) print(result, '---', type(result)) # >>> 執行結果如下: # >>> 15 --- <class 'int'>
scores = [("張三", 89, 90, 59), ("李四", 99, 49, 59), ("趙五", 99, 60, 20), ("王二麻子", 40, 94, 59), ("李雷", 89, 90, 59), ("李莉", 89, 90, 69), ("楚浠", 79, 90, 59), ("Neo", 85, 90, 59), ("Abby", 89, 91, 90)] def handle_filter(a): s = sorted(a[1:]) # 對三科成績進行排序 # 有 2 科成績在 80 分以上,並且有 1 科在 60 分以下的 if s[-2] > 80 and s[0] < 60: return True # 有 1 科成績在 90 分以上,另外 2 科成績都在 60 分以下 if s[-1] > 90 and s[1] < 60: return True if s[-2] > 80 and sum(s)/len(s) < 60: # 有 1 科成績在 90 分以上, 且 3 科的平均分在 70 分以下 return True return False newIter = list(filter(handle_filter, scores)) print(newIter) # >>> 執行結果如下: # >>> [('張三', 89, 90, 59), ('李四', 99, 49, 59), ('王二麻子', 40, 94, 59), ('李雷', 89, 90, 59), ('Neo', 85, 90, 59)]
到此這篇關於Python學習之魔法函數(filter,map,reduce)詳解的文章就介紹到這了,更多相關Python filter() map() 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