0

我想以更简洁的方式编写下面的函数:

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() 之类的操作或类似的操作中使用,但我似乎再也找不到那篇文章了。

有人可以向我指出一些涵盖这一点的文献的方向,或者可能花时间解释一些围绕这种性质的陈述的基础知识吗?

4

1 回答 1

5

我想你想要reduce- http://docs.python.org/library/functions.html#reduce

def sum_iterable(a):
    return reduce(lambda x,y: x+y, a, 0)

基本上,reduce 允许您将可迭代或列表“折叠”成一个值。对于应该返回单个值的东西,您不会想要生成器表达式。

于 2012-05-02T04:45:21.433 回答