在python中是否有这样的函数的内置等价物:
def foo(a_func,a_list):
if len(a_list)==2:
return a_func(*[a_list])
else:
return a_func(a_list[0],foo(a_func,a_list[0:]))
换句话说foo(lambda x,y:x+y,[1,2,3,4])
会添加1+2+3+4
并且foo(lambda x,y:x-y,[1,2,3,4])
会((1-2)-3)-4
等。
而且我知道你可以让它更快并防止堆栈溢出(:D)但我想我记得这样的功能但不知道这个名字是什么,不知道该怎么去谷歌。
答案 0 :(得分:3)
它是reduce
函数的用途!
将两个参数的函数累加到iterable的项目中,从左到右,以便将iterable减少为单个值
答案 1 :(得分:2)
看起来你正在寻找https://docs.python.org/2/library/functools.html#functools.reduce(Python 2中的AKA https://docs.python.org/2/library/functions.html#reduce),假设你的代码中有一个错误,a_list[0:]
你实际上是指{ {1}}(否则你正在寻找一个永无止境的循环: - )。
答案 2 :(得分:2)
您正在描述reduce()
function;在Python 3中它已被移动到functools
module:
将两个参数的函数累加到序列项中,从左到右,以便将序列减少为单个值。例如,
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
计算((((1+2)+3)+4)+5)
。
你当然可以使用任何可赎回的; operator
module提供了几个方便的选项:
>>> from functools import reduce
>>> import operator
>>> reduce(operator.add, [1,2,3,4])
10
>>> reduce(operator.sub, [1,2,3,4])
-8