我想以更简洁的方式编写以下函数:
def sum_list(l):
x = 0
for i in l:
x += i
return x
我知道我可以很容易地做到这一点:
def sum_list(l):
return sum(l)
但为了更好地理解python,我一直在修改生成器和列表理解。
所以我试过了:
def sum_list(l):
x = 0
return (x += i for i in l)
但这只是返回生成器对象。我记得在某个地方读过它应该在像sum()这样的操作中使用,或者沿着这些行的某些东西,但我似乎找不到那篇文章了。
有人可以指出我的一些文献的方向,或者可能花时间解释一些围绕这种性质的基础知识吗?
答案 0 :(得分:5)
我想你想要reduce
- http://docs.python.org/library/functions.html#reduce
def sum_iterable(a):
return reduce(lambda x,y: x+y, a, 0)
基本上,reduce允许您将可迭代或列表“折叠”为值。您不希望生成器表达式应该返回单个值。