python內(nèi)置函數(shù)map/filter/reduce詳解
在Python中,map(), filter(), 和 reduce() 是內(nèi)置的高級(jí)函數(shù)(實(shí)際是class),用于處理可迭代對(duì)象(如列表、元組等)的元素。這些函數(shù)通常與lambda函數(shù)一起使用,以簡(jiǎn)潔地表達(dá)常見的操作。下面我將分別解釋這三個(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ù)來轉(zhuǎn)換它。
- 當(dāng)使用 map() 函數(shù)時(shí),請(qǐng)確保傳遞給它的函數(shù)能夠正確地處理可迭代對(duì)象的元素。如果函數(shù)引發(fā)異常,則 map() 將停止迭代。
示例
傳入一個(gè)可迭代對(duì)象
#通過map函數(shù) 返回經(jīng)過平方計(jì)算后的結(jié)果 value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) #之前文章講過使用list(),將可迭代對(duì)象轉(zhuǎn)為列表 print(list(value1)) #結(jié)果 [1, 4, 9, 16, 25]
傳入多個(gè)可迭代對(duì)象
#通過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)) #之前文章講過使用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 如何修改程序默認(rèn)時(shí)區(qū)
這篇文章主要介紹了Python 如何修改程序默認(rèn)時(shí)區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09如何理解python接口自動(dòng)化之logging日志模塊
代碼需要經(jīng)歷開發(fā)、調(diào)試、審查、測(cè)試或者上線等不同階段,在“測(cè)試”時(shí),可能只想看警告和錯(cuò)誤信息,然而在“調(diào)試”時(shí),可能還想看到跟調(diào)試相關(guān)的信息。如果想打印出使用的模塊以及代碼運(yùn)行的時(shí)間,那么代碼很容易變得混亂。使用logging日志模塊,就能很容易地解決2021-06-06matlab調(diào)用python的各種方法舉例子詳解
為了發(fā)揮matlab的繪圖優(yōu)勢(shì)+原先python寫好的功能組合方式,下面這篇文章主要給大家介紹了關(guān)于matlab調(diào)用python的各種方法,需要的朋友可以參考下2023-09-09python tkinter之 復(fù)選、文本、下拉的實(shí)現(xiàn)
這篇文章主要介紹了python tkinter之 復(fù)選、文本、下拉的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Python后臺(tái)管理員管理前臺(tái)會(huì)員信息的講解
今天小編就為大家分享一篇關(guān)于Python后臺(tái)管理員管理前臺(tái)會(huì)員信息的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01Python之inspect模塊實(shí)現(xiàn)獲取加載模塊路徑的方法
今天小編就為大家分享一篇Python之inspect模塊實(shí)現(xiàn)獲取加載模塊路徑的方法,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10pytorch中DataLoader()過程中遇到的一些問題
這篇文章主要介紹了pytorch中DataLoader()過程中遇到的一些問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)aes加密解密多種方法解析
這篇文章主要介紹了Python實(shí)現(xiàn)aes加密解密多種方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05