python中的复杂表达式减少了

dis*_*ive 1 python lambda

是否有一种智能的方法来对列表求和,但实际上在求和之前执行地图类型函数.

我正在尝试将这些函数组合到一个使用lambda的函数中:

xlist = [1, 2, 3, 4]
sum(map(lambda x: (x - 1.0)**2, xlist))

# result = 14.0
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个:

reduce(lambda x, y: x + (y - 1.0)**2, xlist)

# result = 15.0
Run Code Online (Sandbox Code Playgroud)

但这不是同样的结果.什么是最明智的解决方法.我有点好奇,我知道我可以使用,sum(map())但我想知道是否可以通过这种方式使用reduce.

iCo*_*dez 7

是的,你只需要传递一个初始值0:

>>> xlist = [1, 2, 3, 4]
>>> reduce(lambda x, y: x + (y - 1.0)**2, xlist, 0)
14.0
>>>
Run Code Online (Sandbox Code Playgroud)

请记住,虽然reducePython程序员通常会讨厌它,因为它是多么难以理解.使用第一种方法可能会更好.

或者,更好的是,使用生成器表达式:

sum((x - 1.0)**2 for x in xlist)
Run Code Online (Sandbox Code Playgroud)

这样更容易阅读,也更有效,因为map创建了一个不必要的列表.