鎮(zhèn)江做網(wǎng)站哪家公司好靠網(wǎng)絡(luò)營(yíng)銷火起來(lái)的企業(yè)
? ? ? 在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 reducenumbers = [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 reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers)
# 輸出: 21
共勉: 東漢·班固《漢書(shū)·枚乘傳》:“泰山之管穿石,單極之綆斷干。水非石之鉆,索非木之鋸,漸靡使之然也?!?/p>
-----指水滴不斷地滴,可以滴穿石頭;
-----比喻堅(jiān)持不懈,集細(xì)微的力量也能成就難能的功勞。
----感謝讀者的閱讀和學(xué)習(xí),謝謝大家。