国产探花免费观看_亚洲丰满少妇自慰呻吟_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],實現累加的方式有很多:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 攀枝花市| 积石山| 漳平市| 万山特区| 兴国县| 嵊州市| 颍上县| 来安县| 乐昌市| 玉田县| 洛扎县| 久治县| 酒泉市| 镇安县| 民勤县| 错那县| 淄博市| 珲春市| 准格尔旗| 宜兰县| 田东县| 富裕县| 定南县| 紫金县| 搜索| 信丰县| 尤溪县| 涿鹿县| 和龙市| 突泉县| 五大连池市| 遵义县| 吐鲁番市| 雷州市| 东乌| 鹰潭市| 慈利县| 彝良县| 河西区| 宜君县| 留坝县|