2

私が書いているいくつかのコードでは、追加ではなく独自のカスタム 2 引数関数を除いて、組み込みの sum() 関数に似た関数が必要です。このような関数を書くのは簡単ですが、標準ライブラリのどこかにあるのだろうか?itertools docを調べましたが、何も見つかりませんでした。itertools.accumulate(mylist)[-1]合計以外の関数を除いて、 にも似ています。

そのような関数の私自身のコード:

def accumulate(iterable, func):
    it = iter(iterable)
    out = func(next(it), next(it))
    for i in it:
        out = func(out, i) # "out += i"
    return out

sum(mylist)と同等ですaccumulate(mylist, lambda x, y: x+y)。もちろん、私の使用例では、使用したい別の関数があります (単純な算術演算よりも複雑です)。

これはかなり一般的なことのように思えます。そのため、30 分の検索でこのようなものが見つからなかったことに驚いています。では、そのような関数が標準ライブラリに存在する場合、どこに存在するのでしょうか? (今のところ、上記の独自のコードを使用しています。)

4

1 に答える 1

3

その関数の通常の名前はfoldorreduceで、実際には後者の名前で Python 2 に組み込まれています。

>>> reduce(lambda x,y: x*y, [1,3,5,4])
60

functoolsPython 3 では、モジュールからインポートする必要があります。

于 2012-12-08T01:09:44.307 に答える