Раскрыть список
Ваша задача — реализовать функцию unfold
, которая принимает в качестве аргументов итераторную функцию и начальное значение семени. Итераторная функция принимает один аргумент (seed
) и должна всегда возвращать список из двух элементов ([value
, nextSeed
]) или False
, чтобы прекратить работу. Функция unfold
должна использовать генераторную функцию fn_generator
, которая использует цикл while
для вызова итераторной функции и yield
значения value
, пока она не вернет False
. Наконец, функция unfold
должна использовать списочное выражение для возврата списка, который генерируется генератором, с использованием итераторной функции.
Реализуйте функцию unfold
:
def unfold(fn, seed):
## ваш код здесь
Входные данные
- Итераторная функция
fn
, которая принимает один аргумент (seed
) и должна всегда возвращать список из двух элементов ([value
, nextSeed
]) или False
, чтобы прекратить работу.
- Начальное значение семени
seed
.
Выходные данные
- Список, который генерируется генератором, с использованием итераторной функции.
def unfold(fn, seed):
def fn_generator(val):
while True:
val = fn(val[1])
if val == False: break
yield val[0]
return [i for i in fn_generator([None, seed])]
f = lambda n: False if n > 50 else [-n, n + 10]
unfold(f, 10) ## [-10, -20, -30, -40, -50]