Генератор в одну строку, который действует как сокращение, но дает все промежуточные результаты - PullRequest
0 голосов
/ 06 января 2019

Мне нравится, как легко реализовать все виды часто используемого высокоуровневого алгоритмического поведения в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...