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 に答える