我正在尝试实现我自己的Python版本的地图功能。我称之为my_map。约束是使用函数式编程(如果允许语句,则不使用循环)。
以下是实施:
# f is the function it takes in, and ls is the list to apply this function over.
def my_map(f, ls):
if len(ls) != 1:
ret = my_map(f, ls[1:])
return [f(ls[0])] + [ret]
else:
return f(ls[0])
但是当我使用以下输入运行时:
def f(x):
return x * x
my_map(f, [1,2,3,4])
返回[1, [4, [9, 16]]]
而map(f, [1,2,3,4])
返回[1, 4, 9, 16]
,这就是我所期望的。
关于如何获得预期结果的任何想法?
答案 0 :(得分:3)
return [f(ls[0])] + [ret]
应该是
return [f(ls[0])] + ret
。您正在从ret
创建一个新的单元素列表,但只有第一个列表应该是单元素列表。
此外,发电机可能效率更高。你正在制作很多部分名单。
def my_map(f, ls):
it = iter(ls)
def go():
yield f(next(it))
yield from go()
return list(go())