Python reduce 函式的用法小結

2022-09-28 06:15:07 字數 1675 閱讀 6132

reduce()函式也是python內建的乙個高階函式。

reduce()

格式:reduce (func, seq[, init()])

reduce()函式即為化簡函式,它的執行過程為:每一次迭代,都將上一次的迭代結果(注:第一次為init元素,如果沒有指定init則為seq的第乙個元素)與下乙個元素一同傳入二元func函式中去執行。在reduce()函式中,init是可選的edebulcgc,如果指定,則作為第一次迭代的第乙個元素使用,如果沒有指定,就取seq中的第乙個元素。

reduce()函式的執行過程如下圖所示:

從reduce函式的執行過程,讓我們很容易聯想到求乙個數的階乘,而python中並沒有給出乙個求階乘的內建函式,正好我們就拿這個例子來說明reduce函式吧。

#未指定init的情況

>>> n = 6

>>> print reduce(lambda x, y: x * y, range(1, n))

120上面的例子中range(1,6)函式生成的是乙個[1, 2, 3, 4, 5]這樣的列表,這裡我們給它個名叫seq1吧,reduce()函式執行時,由於沒有指定ini程式設計客棧t引數,所以將取seq1中的第乙個元素1,作為第乙個元素,由於前面的lambda有2個變數,所以需要兩個實程式設計客棧參,於是就取seq1中的第2個元素2,與第乙個元素1一起傳入lambda中去執行,並將返回結果2,並同下乙個元素3再一起傳入lambda中執行,再次返回的結果,作為下一次執行的第乙個元素,依次類推,就得出結果5! = 120。

如果我們希望得到階乘的結果再多增加幾倍,可以啟用init這個可選項。如:

>>> print reduce(lambda x, y: x * y, range(1, n),2)

240這個時候,就會將init作為第乙個元素,和seq1中的第乙個元素1一起傳入lambda函式中去執行,返回結果再作為下一次的第乙個元素。

下面給出的例子更簡單一些,大家可以看下

reduce()函式接收的引數和 map()類似,乙個函式 f,乙個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。

例如,編寫乙個f函式,接收x和y,返回x和y的和:

def f(x, y):

return x + y

呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:

先計算頭兩個元素:f(1, 3),結果為4;

再把結果和第3個元素計算:f(4, 5),結果為9;

再把結果和第4個元素計算:f(9, 7),結果為16;

再把結果和第5個元素計算:f(16, 9),結果為25;

由於沒有更多的元素了,計算結束,返回結果25。

上述計算實際上是對 list 的所有元素求和。雖然python內建了求和函式sum(),但是,利用reduce()求和也很簡單。

reduce()還可以接收第3個可選引數,作為計算的初始值。如果把初始值設為100,計算:

reduce(f, [1, 3, 5, 7, 9], 100)

結果將變為125,因為第一輪計算是:

計算初始值和第乙個元素:f(100, 1),結果為101。

本文標題: python reduce()函式的用法小結

本文位址: /jiaoben/python/211091.html

Python reduce 函式的使用簡明教程

reduce 函式會對引數序列中元素進行累積。python3.x reduce 已經被移到 functools 模組裡,如果我們要使用,需要引入 functools 模組來呼叫 reduce 函式 from functools import reducereduce 函式語法如下 reduce fu...

Python reduce原來是這樣用的

官方解釋 這樣看來,其實下面的 定義是有一點問題,我們在程式中呼叫這段 reduce lambda x,y x y,1,2,3,4,5 得到的結果為16,而正確的結果為15,問題在於如果集合不是以0開始,那麼按照如下 第一次呼叫x 1,即第乙個元素,y也是等於1,也是第乙個元素,而正確的y應該是2。...

函式的用法 Excel函式TREND函式的用法

trend函式是乙個線性趨勢的 函式,在已知y值 x值的條件下,x對應的y值 trend共有4個引數,三個必選引數,乙個可選引數 同樣的一組資料第四引數不同,結果也是有區別的 灰色曲線是由第四引數為false時得到的結果生成的曲線。通過斜率與截距函式我們計算出這兩條曲線的斜率與截距,可以看出,第四引...