实现地图返回列表的列表而不是列表



我正在尝试实现我自己的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())

最新更新