在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
