鎮(zhèn)江做網(wǎng)站哪家公司好靠網(wǎng)絡營銷火起來的企業(yè)
? ? ? 在Python中,map(), filter(), 和 reduce() 是內(nèi)置的高級函數(shù)(實際是class),用于處理可迭代對象(如列表、元組等)的元素。這些函數(shù)通常與lambda函數(shù)一起使用,以簡潔地表達常見的操作。下面我將分別解釋這三個函數(shù)。
1. map()函數(shù)
map() 函數(shù)將一個函數(shù)應用于一個或多個可迭代對象的每個元素,并返回一個迭代器,該迭代器包含函數(shù)應用于每個元素的結果。
以下是builtins.map的源碼:__init__()函數(shù)可以看出需要傳入一個函數(shù)func和至少一個可迭代對象。
map(function, iterable, ...)
- function:接收一個或多個參數(shù)的函數(shù)。
- iterable:一個或多個可迭代對象,如列表、元組、字符串等。
注意事項:
- map() 函數(shù)返回的是一個迭代器,如果你需要一個列表或其他可迭代對象,你需要使用 list() 或其他相應的函數(shù)來轉換它。
- 當使用 map() 函數(shù)時,請確保傳遞給它的函數(shù)能夠正確地處理可迭代對象的元素。如果函數(shù)引發(fā)異常,則 map() 將停止迭代。
示例
傳入一個可迭代對象
#通過map函數(shù) 返回經(jīng)過平方計算后的結果
value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
#之前文章講過使用list(),將可迭代對象轉為列表
print(list(value1))
#結果
[1, 4, 9, 16, 25]
傳入多個可迭代對象
#通過map函數(shù) 返回兩個可迭代對象中每個對應位置元素的乘積平方
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5],(2,4,6,8,10))
#之前文章講過使用list(),將可迭代對象轉為列表
print(list(value2))
#結果
[2, 8, 18, 32, 50]
但是注意傳入的元素個數(shù)與lambda需要的參數(shù)個數(shù)要一致,否則會報錯
比如上面的例子我們只傳入一個迭代對象,程序執(zhí)行后會報錯
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5])
print(list(value2))
#結果報錯
TypeError: <lambda>() missing 1 required positional argument: 'y'
2. filter()
filter() 函數(shù)使用一個函數(shù)作為條件,并返回一個迭代器,該迭代器包含所有使該函數(shù)返回True的可迭代對象的元素。
以下是builtins.filter的源碼:__init__()函數(shù)可以看出需要傳入一個函數(shù)func和一個可迭代對象。
filter(function, iterable)
- function:一個函數(shù),它接受一個參數(shù)并返回一個布爾值。
- iterable:一個可迭代對象,如列表、元組、字符串等。
示例
傳入一個可迭代對象,使用lambda函數(shù)獲取被2整除的數(shù)
numbers = [10, 3, 9, 8, 6]
filternumbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filternumbers))
#結果
[10, 8, 6]
3. reduce()
reduce() 函數(shù)將一個二元操作符(或函數(shù))連續(xù)地應用于一個可迭代對象的元素,從而將其減少為單個值。python3的版本reduce() 函數(shù)在Python的functools 模塊中,使用時需要先導入。
reduce(function, sequence, initial=_initial_missing)
- function:該函數(shù)接受兩個參數(shù)并返回一個值。
- sequence:一個可迭代對象,如列表、元組等。
- initial(可選):傳入該值表示操作的初始值。如果保持默認值,則使用可迭代對象的第一個元素作為初始值。
示例
1) 將可迭代對象的值相加
from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers)
print(sumnumbers)
# 輸出: 15
當然像上面這種簡單的例子,用sum(numbers)函數(shù)更簡單。
2) 傳入1個初始值作為第1個元素
from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers)
# 輸出: 21
共勉: 東漢·班固《漢書·枚乘傳》:“泰山之管穿石,單極之綆斷干。水非石之鉆,索非木之鋸,漸靡使之然也?!?/p>
-----指水滴不斷地滴,可以滴穿石頭;
-----比喻堅持不懈,集細微的力量也能成就難能的功勞。
----感謝讀者的閱讀和學習,謝謝大家。