有没有一种聪明的方法来汇总列表,但是实际上在汇总之前执行了地图类型的功能。
我正在尝试将这些功能合并为一个使用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程序员通常讨厌它。使用第一种方法可能会更好。或者,甚至更好的是,使用generator expression:
sum((x - 1.0)**2 for x in xlist)
这很容易阅读,而且效率更高,因为
map
创建了不必要的列表。