web-dev-qa-db-ja.com

Pythonに組み込みのproduct()はありますか?

私はチュートリアルと本を見てきましたが、組み込みの製品関数、つまりsum()と同じタイプの言及はありませんが、prod()などは見つかりませんでした。

mul()演算子をインポートして、リスト内のアイテムの製品を見つけることができる唯一の方法はありますか?

76
George Burrows

宣告

はい、そうです。 Guido は組み込みprod()関数のアイデアを拒否しました

Python 3.8アップデート

Python 3.8、prod()が数学モジュールに追加されました:

>>> from math import prod
>>> prod(range(1, 11))
3628800

Reduce()の代替

あなたが提案したように、 reduce()operator.mul()

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

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

Python 3、 reduce() 関数が移動されました functoolsモジュール に追加する必要があります:

from functools import reduce

特定のケース:階乗

補足として、prod()の主な動機付けの使用例は、階乗を計算することです。 mathモジュールで既にサポートしています

>>> import math

>>> math.factorial(10)
3628800

対数による代替

データが浮動小数点で構成される場合、指数と対数を使用してsum()を使用して積を計算できます。

>>> 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
90

Pythonにはproductはありませんが、次のように定義できます。

def product(iterable):
    return reduce(operator.mul, iterable, 1)

または、NumPyがある場合は、numpy.product

19
Fred Foo

reduce()関数はfunctools python 3. モジュールに移動されたため、別のアプローチをとる必要があります。

functools.reduce()を使用して、関数にアクセスできます。

_product = functools.reduce(operator.mul, iterable, 1)
_

または、Pythonチームの精神(forの方が読みやすいと思われるためreduce()を削除しました)をフォローしたい場合は、ループで実行します。

_product = 1
for x in iterable:
    product *= x
_
12
Paul Paulsen
from numpy import multiply, product
list1 = [2,2,2]
list2 = [2,2,2]
mult = 3
prod_of_lists = multiply(list1,list2)
>>>[4,4,4]
prod_of_list_by_mult = multiply(list1,mult)
>>>[6,6,6]
prod_of_single_array = product(list1)
>>>8

numpyにはリスト用の非常にクールな関数がたくさんあります!

7
HuntR2