展开列表
使用迭代函数和初始种子值构建一个列表。
- 迭代函数接受一个参数(
seed
),并且必须始终返回一个包含两个元素([value
,nextSeed
])或者返回False
来终止。 - 使用生成器函数
fn_generator
,使用while
循环调用迭代函数,并且yield
返回的value
,直到它返回False
。 - 使用列表推导式返回由迭代函数生成的列表。
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]