python3中reduce函數的使用


在python3中如果使用reduce需要先導入

from functools import reduce

reduce函數,reduce函數會對參數序列中元素進行累積。

reduce函數的定義:
reduce(function, sequence [, initial] ) -> value
function參數是一個有兩個參數的函數,reduce依次從sequence中取一個元素,和上一次調用function的結果做參數再次調用function。
第一次調用function時,如果提供initial參數,會以sequence中的第一個元素和initial作為參數調用function,否則會以序列sequence中的前兩個元素做參數調用function。

舉例說明上面這段話的意思.比如有列表lst=[1,2,3,4],我們希望得到列表每個元素之和,代碼如下:

 

from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x+y, lst))

那如果我們希望是序列的乘積呢,接下來我們在看下代碼,下面代碼的意思就是列表每個元素相乘的結果

from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x*y, lst))

# 結果24

下面來個稍微復雜點的,注意看lambda函數的變化,

from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x*y+1, lst))

#計算過程如下:
# 這個式子只有兩個參數,沒有初始化值,那么就取列表前2項,通過lambda函數計算結果
#1*2+1=3,
#上面計算的結果在與列表第三個元素通過lambda函數計算
# 3*3+1=10
#上面計算的結果在與列表第四個元素通過lambda函數計算
# 10*4+1=41

接下來都是以此類推,可以自己增加幾個元素演示,或者換下lamda函數計算,驗證結果.

再說說有初始化值的情況, 這個時候就不是取列表的前兩項, 而是取初始值為第一個,序列的第一個元素為第二個元素,開始進行lambda函數的應用計算.

說的有點混亂,看代碼吧!

from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x+y, lst,5))

# 5是初始值,也可以理解為第三個參數
# 計算呢過程
-->5+1=6
-->6+2=8
-->8+3=11
-->11+4=15

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM