Sum ()과 같은 기능은 무엇입니까? 제품()?
문제
파이썬 sum()
함수는 반복 가능한 숫자의 합을 반환합니다.
sum([3,4,5]) == 3 + 4 + 5 == 12
대신 제품을 반환하는 기능을 찾고 있습니다.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
나는 그러한 기능이 존재한다고 확신하지만 찾을 수 없습니다.
해결책
실제로 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)
다른 팁
업데이트:
파이썬 3.8에서 찌르다 기능이 추가되었습니다 수학 기준 치수. 보다: math.prod ().
구형 정보 : Python 3.7 및 사전
당신이 찾고있는 기능을 호출합니다 찌르다() 또는 제품() 그러나 파이썬에는 그 기능이 없습니다. 따라서 자신만의 글을 써야합니다 (쉽습니다).
prod ()에 대한 선언
네, 맞습니다. 가이도 아이디어를 거부했습니다 내장 된 prod () 함수의 경우 거의 필요하지 않다고 생각했기 때문입니다.
reture ()와 대안
당신이 제안했듯이, 스스로 사용하는 것은 어렵지 않습니다. 줄이다() 그리고 연산자 .mul ():
from functools import reduce
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
Python 3에서 줄이다() 기능은 funcTools 모듈, 따라서 추가해야합니다.
from functools import reduce
특정 사례 : Factorials
참고로, 주요 동기 부여 사용 사례 찌르다() 팩토리 노트를 계산하는 것입니다. 우리는 이미 그에 대한 지원을 받았습니다 수학 모듈:
>>> 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
주, 사용 통나무() 모든 입력은 양수가 필요합니다.
내장 된 것은 없지만 시연대로 자신의 것을 굴리는 것은 간단합니다. 여기:
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
이 질문에 대한 답변을 참조하십시오.
거기에 prod()
Numpy에서 당신이 요구하는 일을합니다.
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 () 그리고 대답 사용 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)