我正在尝试学习函数式编程概念。
练习,使用 map/reduce 展平嵌套列表。
我的代码。
lists = [ 1 , 2 , [ 3 , 4, 5], 6, [7, 8, 9] ]
def flatten(lists):
return map(lambda x: flatten(x) if isinstance(x,list) else x, lists)
print flatten(lists)
我得到的输出与输入相同。我做错了什么 ?
递归如何与 map() 一起使用?
这是一个同时使用两者的解决方案map
and reduce
:
def flatten(seq):
return reduce(operator.add, map(
lambda x: flatten(x) if isinstance(x,list) else [x],
seq))
正如 Martijn 所说,map 生成的项目数量与它在输入中接收到的项目数量相同,因此外部步骤需要是reduce
为所有输入生成单个输出的调用。map
可以在这里使用来使所有输入一致:即列表序列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)