Frage

Pythons sum() Funktion gibt die Summe der Zahlen in einem iterable.

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

Ich interessiere mich für die Funktion, die das neue Produkt zurückgibt.

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

Ich bin mir ziemlich sicher, dass eine solche Funktion vorhanden ist, aber ich kann es nicht finden.

War es hilfreich?

Lösung

Eigentlich Guido die Idee, ein Veto gegen: http://bugs.python.org/issue1093

Aber, wie in dieser Frage erwähnt, können Sie eine ziemlich leicht machen:

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

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

Andere Tipps

Update:

In Python 3.8, die prod Funktion des Mathematik Modul wurde hinzugefügt. Siehe:. math.prod ()

ältere Info: Python 3.7 und vor

Die Funktion, die Sie suchen würde aufgerufen werden prod () oder Produkt () aber Python nicht über diese Funktion. So müssen Sie Ihre eigene schreiben (was einfach ist).

Verlautbarung auf prod ()

Ja, das ist richtig. Guido verwarf die Idee für einen Einbau-prod () Funktion, weil er es gedacht wurde, nur selten benötigt.

Alternative mit reduzieren ()

Wie Sie vorgeschlagen, ist es nicht schwer zu Ihrer eigenen Verwendung zu machen reduzieren () und Operator. mul () :

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

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

In Python 3, die reduzieren () wurde Funktion zum href="https://docs.python.org/3/library/functools.html" rel="noreferrer"> functools Modul

from functools import reduce

Sonderfall: Faktorielle

Als Randbemerkung, der primären Motivationsanwendungsfall für prod () ist factorials zu berechnen. Wir haben bereits ihre Unterstützung für die in der Mathematikmodul :

>>> import math

>>> math.factorial(10)
3628800

Alternative mit Logarithmen

Wenn Ihre Daten von Schwimmern bestehen, können Sie ein Produkt berechnen mit sum () mit Exponenten und Logarithmen:

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

Beachten Sie die Verwendung von log () setzt voraus, dass alle Eingänge sind positiv.

Es gibt nicht einen eingebauten, aber es ist ganz einfach Ihre eigene Rolle, wie gezeigt, hier :

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

Siehe Antworten auf diese Frage:

Welche Python-Modul eignet sich für Daten Manipulation in einer Liste?

Es gibt eine prod() in numpy das tut, was Sie fragen nach.

Numeric.product 

(oder

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

)

Verwenden Sie diese

def prod(iterable):
    p = 1
    for n in iterable:
        p *= n
    return p

Da gibt es keine integrierte in prod Funktion.

Ich ziehe die Antworten ein und b oben mit functools.reduce () und href="https://stackoverflow.com/a/6364663/778533"> die mit numpy.prod () , aber hier ist noch eine andere Lösung mit itertools.accumulate () :

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

Vielleicht keine „builtin“, aber ich halte es gebautet. sowieso nur verwenden numpy

import numpy 
prod_sum = numpy.prod(some_list)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top