pythonreduce中的复杂表达式

pythonreduce中的复杂表达式,python,lambda,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 但结果并不相同。解决这个问题最聪明的方法是什么。我有点好奇,我知道我可以使用su

是否有一种聪明的方法对列表求和,但在求和之前实际执行映射类型函数

我试图将这些函数组合成一个使用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是否可以这样使用

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

>>> xlist = [1, 2, 3, 4]
>>> reduce(lambda x, y: x + (y - 1.0)**2, xlist, 0)
14.0
>>>
请记住,
reduce
通常被Python程序员所憎恨,因为它是多么不可读。使用第一种方法可能会更好

或者,更好的方法是使用:


因为
map
创建了一个不必要的列表,所以它更容易阅读,也更高效。

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

>>> xlist = [1, 2, 3, 4]
>>> reduce(lambda x, y: x + (y - 1.0)**2, xlist, 0)
14.0
>>>
请记住,
reduce
通常被Python程序员所憎恨,因为它是多么不可读。使用第一种方法可能会更好

或者,更好的方法是使用:


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

第一种方法在我的机器上也更快这可能是因为列表很小。我相信它会随着更大的投入而改变。此外,它并没有改变这样一个事实,
map
构建了一个列表,而我们只是扔掉了它。genexp的可读性也更高(至少在我看来是这样)。在包含10000个元素的列表上,只使用sum是最快的。在我的机器上,第一种方法也更快。这可能是因为列表很小。我相信它会随着更大的投入而改变。此外,它并没有改变这样一个事实,
map
构建了一个列表,而我们只是扔掉了它。genexp的可读性也更高(至少在我看来是这样)。在10000个元素的列表中,使用sum是最快的