3

所以我的朋友提出了一个问题让我解决,我目前正在用函数式 Python 编写一个解决方案。问题本身不是我的问题;我正在寻找一个我目前找不到的可能的成语。

我需要的是折叠,但不是对每个应用程序都使用相同的函数,而是会像地图一样耗尽另一个包含函数的列表。例如,给定以下代码:

nums = [1, 2, 3]
funcs = [add, sub]
special_foldl(nums, funcs)

函数 (special_foldl) 将用 ((1 + 2) - 3) 折叠数字列表。有没有优雅地做到这一点的功能/习语,还是我应该自己动手?

4

1 回答 1

2

Python 标准库中没有这样的函数。你必须自己动手,也许是这样的:

import operator
import functools

nums = [1, 2, 3]
funcs = iter([operator.add, operator.sub])

def special_foldl(nums, funcs):
    return functools.reduce(lambda x,y: next(funcs)(x,y), nums)

print(special_foldl(nums, funcs))
# 0
于 2013-05-17T19:51:33.557 回答