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