python內(nèi)置函數(shù)map/filter/reduce詳解
在Python中,map(), filter(), 和 reduce() 是內(nèi)置的高級(jí)函數(shù)(實(shí)際是class),用于處理可迭代對(duì)象(如列表、元組等)的元素。這些函數(shù)通常與lambda函數(shù)一起使用,以簡(jiǎn)潔地表達(dá)常見(jiàn)的操作。下面我將分別解釋這三個(gè)函數(shù)。
1. map()函數(shù)
map() 函數(shù)將一個(gè)函數(shù)應(yīng)用于一個(gè)或多個(gè)可迭代對(duì)象的每個(gè)元素,并返回一個(gè)迭代器,該迭代器包含函數(shù)應(yīng)用于每個(gè)元素的結(jié)果。
以下是builtins.map的源碼:__init__()函數(shù)可以看出需要傳入一個(gè)函數(shù)func和至少一個(gè)可迭代對(duì)象。

map(function, iterable, ...)
- function:接收一個(gè)或多個(gè)參數(shù)的函數(shù)。
- iterable:一個(gè)或多個(gè)可迭代對(duì)象,如列表、元組、字符串等。
注意事項(xiàng):
- map() 函數(shù)返回的是一個(gè)迭代器,如果你需要一個(gè)列表或其他可迭代對(duì)象,你需要使用 list() 或其他相應(yīng)的函數(shù)來(lái)轉(zhuǎn)換它。
- 當(dāng)使用 map() 函數(shù)時(shí),請(qǐng)確保傳遞給它的函數(shù)能夠正確地處理可迭代對(duì)象的元素。如果函數(shù)引發(fā)異常,則 map() 將停止迭代。
示例
傳入一個(gè)可迭代對(duì)象
#通過(guò)map函數(shù) 返回經(jīng)過(guò)平方計(jì)算后的結(jié)果 value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) #之前文章講過(guò)使用list(),將可迭代對(duì)象轉(zhuǎn)為列表 print(list(value1)) #結(jié)果 [1, 4, 9, 16, 25]
傳入多個(gè)可迭代對(duì)象
#通過(guò)map函數(shù) 返回兩個(gè)可迭代對(duì)象中每個(gè)對(duì)應(yīng)位置元素的乘積平方 value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5],(2,4,6,8,10)) #之前文章講過(guò)使用list(),將可迭代對(duì)象轉(zhuǎn)為列表 print(list(value2)) #結(jié)果 [2, 8, 18, 32, 50]

但是注意傳入的元素個(gè)數(shù)與lambda需要的參數(shù)個(gè)數(shù)要一致,否則會(huì)報(bào)錯(cuò)
比如上面的例子我們只傳入一個(gè)迭代對(duì)象,程序執(zhí)行后會(huì)報(bào)錯(cuò)
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5]) print(list(value2)) #結(jié)果報(bào)錯(cuò) TypeError: <lambda>() missing 1 required positional argument: 'y'
2. filter()
filter() 函數(shù)使用一個(gè)函數(shù)作為條件,并返回一個(gè)迭代器,該迭代器包含所有使該函數(shù)返回True的可迭代對(duì)象的元素。
以下是builtins.filter的源碼:__init__()函數(shù)可以看出需要傳入一個(gè)函數(shù)func和一個(gè)可迭代對(duì)象。

filter(function, iterable)
- function:一個(gè)函數(shù),它接受一個(gè)參數(shù)并返回一個(gè)布爾值。
- iterable:一個(gè)可迭代對(duì)象,如列表、元組、字符串等。
示例
傳入一個(gè)可迭代對(duì)象,使用lambda函數(shù)獲取被2整除的數(shù)
numbers = [10, 3, 9, 8, 6] filternumbers = filter(lambda x: x % 2 == 0, numbers) print(list(filternumbers)) #結(jié)果 [10, 8, 6]
3. reduce()
reduce() 函數(shù)將一個(gè)二元操作符(或函數(shù))連續(xù)地應(yīng)用于一個(gè)可迭代對(duì)象的元素,從而將其減少為單個(gè)值。python3的版本reduce() 函數(shù)在Python的functools 模塊中,使用時(shí)需要先導(dǎo)入。

reduce(function, sequence, initial=_initial_missing)
- function:該函數(shù)接受兩個(gè)參數(shù)并返回一個(gè)值。
- sequence:一個(gè)可迭代對(duì)象,如列表、元組等。
- initial(可選):傳入該值表示操作的初始值。如果保持默認(rèn)值,則使用可迭代對(duì)象的第一個(gè)元素作為初始值。
示例
1) 將可迭代對(duì)象的值相加
from functools import reduce numbers = [1, 2, 3, 4, 5] sumnumbers = reduce(lambda x, y: x + y, numbers) print(sumnumbers) # 輸出: 15
當(dāng)然像上面這種簡(jiǎn)單的例子,用sum(numbers)函數(shù)更簡(jiǎn)單。
2) 傳入1個(gè)初始值作為第1個(gè)元素
from functools import reduce numbers = [1, 2, 3, 4, 5] sumnumbers = reduce(lambda x, y: x + y, numbers,6) print(sumnumbers) # 輸出: 21
到此這篇關(guān)于python內(nèi)置函數(shù)map/filter/reduce詳解的文章就介紹到這了,更多相關(guān)python內(nèi)置函數(shù)map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中main函數(shù)(主函數(shù))相關(guān)應(yīng)用例子
這篇文章主要介紹了python中main函數(shù)(主函數(shù))相關(guān)應(yīng)用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python實(shí)現(xiàn)html轉(zhuǎn)換為pdf報(bào)告(生成pdf報(bào)告)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)html轉(zhuǎn)換為pdf報(bào)告功能,結(jié)合實(shí)例形式分析了Python使用pdfkit實(shí)現(xiàn)HTML轉(zhuǎn)換為PDF的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-05-05
Python中dtype、type()和astype()的區(qū)別詳解
這篇文章主要介紹了Python中dtype、type()和astype()的區(qū)別詳解,type()是python內(nèi)置的函數(shù),type()返回?cái)?shù)據(jù)結(jié)構(gòu)類型(list、dict、numpy.ndarray 等),需要的朋友可以參考下2023-08-08
Python實(shí)例方法與類方法和靜態(tài)方法介紹與區(qū)別分析
在 Python 中,實(shí)例方法(instance method),類方法(class method)與靜態(tài)方法(static method)經(jīng)常容易混淆。本文通過(guò)代碼例子來(lái)說(shuō)明它們的區(qū)別2022-10-10
spyder 在控制臺(tái)(console)執(zhí)行python文件,debug python程序方式
這篇文章主要介紹了spyder 在控制臺(tái)(console)執(zhí)行python文件,debug python程序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
k-means 聚類算法與Python實(shí)現(xiàn)代碼
這篇文章主要介紹了k-means 聚類算法與Python實(shí)現(xiàn)代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06

