[python] sum ()과 같은 기능이지만 곱셈의 기능은 무엇입니까? 생성물()?

파이썬의 sum()함수는 반복 가능한 숫자의 합을 반환합니다.

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

대신 제품을 반환하는 함수를 찾고 있습니다.

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

그러한 기능이 존재한다고 확신하지만 찾을 수 없습니다.



답변

최신 정보:

Python 3.8에서는 prod 함수가 수학 모듈 에 추가되었습니다 . math.prod ()를 참조하십시오 .

이전 정보 : Python 3.7 및 이전

찾고있는 함수는 prod () 또는 product () 이지만 Python에는 해당 함수가 없습니다. 따라서 직접 작성해야합니다 (쉽습니다).

prod ()에 발음

네 맞습니다. Guido 는 거의 필요하지 않다고 생각했기 때문에 내장 prod () 함수에 대한 아이디어거부했습니다 .

reduce ()를 사용한 대안

제안한 것처럼 reduce ()operator.mul ()을 사용하여 직접 만드는 것은 어렵지 않습니다 .

from functools import reduce  # Required in Python 3
def prod(iterable):
    return reduce(operator.mul, iterable, 1)

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

파이썬 3에서는 reduce () 함수가 functools 모듈 로 옮겨졌습니다 .

구체적인 경우 : 계승

참고로, 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

주의 사용 로그는 () 모든 입력 양성해야합니다.


답변

실제로 Guido는이 아이디어를 거부했습니다. 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)


답변

내장 된 것이 없지만 입증 된 것처럼 자신의 것을 굴리는 것은 간단합니다. 여기에 .

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

이 질문에 대한 답변을보십시오 :

목록에서 데이터 조작에 적합한 Python 모듈은 무엇입니까?


답변

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기능 이 없기 때문에 .


답변

functools.reduce () 사용하여 위 의 대답 ab를 선호하고 numpy.prod () 사용 하여 대답선호 하지만 itertools.accumulate () 사용하는 또 다른 솔루션이 있습니다 .

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