首页 > 解决方案 > 行为类似于 reduce 但产生所有中间结果的单行生成器

问题描述

我喜欢在 Python 中实现各种常用的高级算法行为是多么容易。

我现在正在寻找一种最佳方式来实现递归序列或任何其他类型的生成器,其下一个值取决于最近生成的先前值的 O(1)。

即是否可以reduceGenerator在一行中实现以下内容(可能使用现有reduce函数)?

例子

发电机

def reduceGenerator(f, iterable, initialValue):
    it = iter(iterable)
    value = initialValue
    for x in it:
        value = f(value, x)
        yield value

用例:

以下生成序列(a * s[i-1] + b) mod m

s = reduceGenerator(lambda prev, i: (a * prev + b) % m, range(N), s0)
s1 = next(s)
s2 = next(s)

标签: pythongeneratorreducerecurrence

解决方案


推荐阅读