문제

파이썬 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)

이 질문에 대한 답변을 참조하십시오.

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

거기에 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top