質問

パイソンの sum() 関数は反復可能な数値の合計を返します。

sum([3,4,5]) == 3 + 4 + 5 == 12

代わりに製品を返す関数を探しています。

somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60

確かそのような機能があったのですが、見つかりません。

役に立ちましたか?

解決

実際には、グイドは、アイデアを拒否: http://bugs.python.org/issue1093する

しかし、その問題に述べたように、あなたはかなり簡単にものを作ることができます:

from functools import reduce # Valid in Python 2.6+, required in Python 3
import operator

reduce(operator.mul, (3, 4, 5), 1)

他のヒント

アップデート:

Python 3.8 では、 プロッド 機能が追加されました 数学 モジュール。見る: math.prod().

古い情報:Python 3.7 以前

探している関数は次のように呼ばれます prod() または 製品() しかしPythonにはその機能がありません。したがって、独自に記述する必要があります (これは簡単です)。

prod() の発音

はい、そうです。グイド その考えを拒否した 組み込みの prod() 関数はほとんど必要ないと考えたためです。

reduce() を使用した代替方法

あなたが提案したように、それを使用して独自に作成するのは難しくありません 減らす() そして 演算子.mul():

from functools import reduce
def prod(iterable):
    return reduce(operator.mul, iterable, 1)

>>> prod(range(1, 5))
24

Python 3 では、 減らす() 関数はに移動されました 関数ツールモジュール, したがって、次を追加する必要があります。

from functools import reduce

特定のケース:階乗

余談ですが、主な動機となるユースケースは、 prod() 階乗を計算することです。それについてはすでにサポートされています 数学モジュール:

>>> import math

>>> math.factorial(10)
3628800

対数を使用した代替法

データが浮動小数点で構成されている場合は、次を使用して積を計算できます。 和() 指数と対数を使用すると、次のようになります。

>>> from math import log, exp

>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993

>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998

注意してください、の使用 ログ() すべての入力が正である必要があります。

に建て1はありませんが、実証されたように、それは、あなた自身をロールバックするのは簡単です<のhref = "https://stackoverflow.com/questions/493853/which-python-module-is-suitable-for-データ操作・イン・リスト/ 494034#494034" >ここのます:

import operator
def prod(factors):
    return reduce(operator.mul, factors, 1)

この質問への回答を参照してください。

Pythonモジュールは、データに適していますリスト中の操作ですか

何をしてnumpyの中で prod() にありますあなたが求めているます。

Numeric.product 

(または

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

この

を使用します
def prod(iterable):
    p = 1
    for n in iterable:
        p *= n
    return p

組み込みのprod機能はありませんので。

答えの方が好きです ある そして b 上記を使用して functools.reduce() そしてその 答え を使用して numpy.prod(), 、しかし、ここで使用するさらに別の解決策があります itertools.accumulate():

import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]

おそらくない「組み込み」が、私はそれが組み込みを検討してください。とにかくちょうどnumpyの使用

import numpy 
prod_sum = numpy.prod(some_list)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top