1. 程式人生 > >python裡使用reduce()函式

python裡使用reduce()函式

reduce()函式在庫functools裡,如果要使用它,要從這個庫裡匯入。reduce函式與map函式有不一樣地方,map操作是並行操作,reduce函式是把多個引數合併的操作,也就是從多個條件簡化的結果,在計算機的演算法裡,大多數情況下,就是為了簡單化。比如識別影象是否是一隻貓,那麼就是從眾多的畫素裡提煉出來一個判斷:是或否。可能是幾百萬個畫素,就只出來一個結果。在GOOGLE大規模叢集裡,就是利用這個思想,把前面並行處理的操作叫做map,並行處理之後的結果,就需要簡化,歸類,把這個簡化和歸類的過程就叫做reduce。由於reduce只能在一臺主機上操作,並不能分散式地處理,但是reduce處理的是map結果,那麼意味著這些結果已經非常簡單,資料量大大減小,處理起來就非常快。因此可以把mapreduce過程叫做分析歸納的過程。
看一下面reduce()的例子:
#python 3. 6
#蔡軍生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
from functools import reduce

result = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
print(result)

輸出結果:

15

在這個例子裡,其實計算過程是這樣的:
((((1+2)+3)+4)+5)


再看一個階乘的例子:
#python 3. 6
#蔡軍生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
from functools import reduce

n = 3
print(reduce(lambda x, y: x * y, range(1, n + 1)))  # 6

輸出結果:

6


reduce函式,reduce函式會對引數序列中元素進行累積。
reduce函式的定義:
reduce(function, sequence[, initial]) -> value
function引數是一個有兩個引數的函式,reduce依次從sequence中取一個元素,和上一次呼叫function的結果做引數再次呼叫function。
第一次呼叫function時,如果提供initial引數,會以sequence中的第一個元素和initial作為引數呼叫function,否則會以序列sequence中的前兩個元素做引數呼叫function。
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
結果為21(  (((((1+2)+3)+4)+5)+6)  )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])

結果為20

Python遊戲開發入門

你也能動手修改C編譯器

紙牌遊戲開發

五子棋遊戲開發