国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中的reduce內建函數使用方法指南

2020-02-23 05:45:51
字體:
來源:轉載
供稿:網友

官方解釋:

Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to reduce the iterable to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). The left argument, x, is the accumulated value and the right argument, y, is the update value from the iterable. If the optional initializer is present, it is placed before the items of the iterable in the calculation, and serves as a default when the iterable is empty. If initializer is not given and iterable contains only one item, the first item is returned. Roughly equivalent to:

意思就是說:將一個可迭代的對象應用到一個帶有兩個參數的方法上,我們稱之為appFun,遍歷這個可迭代對象,將其中的元素依次作為appFun的參數,但這個函數有兩個參數,作為哪個參數呢?有這樣的規則,看一下下面reduce方法的實現,有三個參數,第一個參數就是上面說的appFun,第二個參數就是那個可迭代的對象,而第三個呢?當調用reduce方法的時候給出了initializer這個參數,那么第一次調用appFun的時候這個參數值就作為第一個參數,而可迭代對象的元素依次作為appFun的第二個參數;如果調用reduce的時候沒有給出initializer這個參數,那么第一次調用appFun的時候,可迭代對象的第一個元素就作為appFun的第一個元素,而可迭代器的從第二個元素到最后依次作為appFun的第二個參數,除第一次調用之外,appFun的第一個參數就是appFun的返回值了。例如reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),計算1到5的和,因為沒有給定initializer參數,所以第一次調用x+y時,x=1,即列表的第一個元素,y=2,即列表的第二個元素,之后返回的1+2的結果作為第二次調用x+y中的x,即上一次的結果,y=2,即第二個元素,依次類推,知道得到1+2+3+4+5的結果。

這樣看來,其實下面的代碼定義是有一點問題,我們在程序中調用這段代碼reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),得到的結果為16,而正確的結果為15,問題在于如果集合不是以0開始,那么按照如下代碼,第一次調用x=1,即第一個元素,y也是等于1,也是第一個元素,而正確的y應該是2。所以真正的reduce方法應該和下面的例子是有差別的。

def reduce(function, iterable, initializer=None):   it = iter(iterable)   if initializer is None:     try:       initializer = next(it)     except StopIteration:       raise TypeError('reduce() of empty sequence with no initial value')   accum_value = initializer   for x in iterable:     accum_value = function(accum_value, x)   return accum_value 

那么reduce函數能做什么,什么情況下要用reduce呢,看下面的例子:

例如上面的例子,實現一個整形集合的累加。假設lst = [1,2,3,4,5],實現累加的方式有很多:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南投市| 旬阳县| 东海县| 凤山县| 友谊县| 农安县| 昭苏县| 临桂县| 凤阳县| 卢湾区| 镶黄旗| 札达县| 佛坪县| 台东县| 佛山市| 张北县| 锦州市| 永善县| 湾仔区| 卢氏县| 潜江市| 永新县| 犍为县| 黄平县| 迁安市| 桑植县| 巢湖市| 朝阳区| 施秉县| 嫩江县| 鄂伦春自治旗| 黄山市| 德令哈市| 萝北县| 察雅县| 佳木斯市| 古田县| 韶山市| 南雄市| 沂源县| 高雄县|