python中的复杂表达式减少了

时间:2014-12-10 18:56:43

标签: python lambda

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

我试图将这些函数组合成一个使用lambda的函数:

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

# result = 14.0

我正在尝试这个:

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

# result = 15.0

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

1 个答案:

答案 0 :(得分:7)

是的,您只需传递初始值0

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

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

或者,更好的是,使用generator expression

sum((x - 1.0)**2 for x in xlist)

这更容易阅读,也更有效率,因为map会创建一个不必要的列表。