2

在我正在编写的一些代码中,我想要一个类似于内置 sum() 函数的函数,除了我自己的自定义两个参数函数而不是加法。编写这样一个函数很容易,但我想知道标准库中是否有一个?我浏览了itertools 文档,但没有找到任何东西。它也类似于itertools.accumulate(mylist)[-1],除了 sum 以外的函数。

我自己的这种功能的代码:

def accumulate(iterable, func):
    it = iter(iterable)
    out = func(next(it), next(it))
    for i in it:
        out = func(out, i) # "out += i"
    return out

所以sum(mylist)将相当于accumulate(mylist, lambda x, y: x+y). 当然,在我的用例中,我想使用一个不同的函数(它比简单的算术运算更复杂。)

这似乎是一件相当普遍的事情,这就是为什么我很惊讶半小时的搜索没有找到这样的东西。那么:标准库中是否以及在哪里存在这样的功能?(我现在在上面使用我自己的代码。)

4

1 回答 1

3

该函数的常用名称是foldor reduce,它实际上是在 Python 2 中以后一个名称内置的:

>>> reduce(lambda x,y: x*y, [1,3,5,4])
60

在 Python 3 中,您必须从functools模块中导入它。

于 2012-12-08T01:09:44.307 回答