pcwu's TIL Notes


[Python] Reduce Function

在 Python 3.x 中,reduce 被移至 funtools 模組,所以如果要使用,就要先 import:

from functools import reduce

Reduce 最常看到的範例介紹就是加總:

a = reduce(lambda x, y: x + y, [47, 11, 42, 13])
# a: 113

再來就是取最大值:

f = lambda a, b: a if (a > b) else b
a = reduce(f, [47, 11, 42, 102, 13])
# a: 102

但其實可以做得更多,reduce 定義:

reduce(func, iter, [initial_value])

初始值 (initial value)

有些事情需要 list 中每個元素都做一次的事情,就可以加入 initial_value 來避免第一個元素沒做到了。

例如輸入的元素,要先查值才相加:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
a = reduce(lambda x, y: x + d[y], ['a', 'b', 'c', 'd', 'e'], 0)
# a: 15

如此就可以很簡單的處理了。

Reference