我正在尝试实现我自己的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]
,这是我所期望的。
关于如何获得预期结果的任何想法?
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())