Ich muss eine Funktion schreiben, die eine Liste von Zahlen nimmt und sie miteinander multipliziert . Beispiel:
[1,2,3,4,5,6]
wird mir geben 1*2*3*4*5*6
. Ich könnte deine Hilfe wirklich gebrauchen.
python
list
multiplication
user1897814
quelle
quelle
lambda
durchschnittlich 0,02 Sekunden / 1000 Wiederholungen benötigt, währendoperator.mul
im Durchschnitt 0,009 Sekunden / 1000 Wiederholungen durchgeführt wurden, wodurchoperator.mul
eine Größenordnung schneller wurde.operator.mul
direkt zu C.math.prod([1,2,3,4,5,6])
. (erfordert natürlich den Import)Sie können verwenden:
Siehe
reduce
undoperator.mul
Dokumentationen für eine Erklärung.Sie benötigen die
import functools
Zeile in Python 3+.quelle
reduce()
Funktion aus dem globalen Namespace entfernt und imfunctools
Modul platziert wurde. In Python3 müssen Sie also sagenfrom functools import reduce
.lambda x,y: x*y
funktioniert auch anstelle vonoperator.mul
Ich würde das verwenden
numpy.prod
, um die Aufgabe auszuführen. Siehe unten.quelle
result = np.prod(mylist)
numpy.int32
wie oben verwendet wird. 2) Bei kleinen Listen ist dies erheblich langsamer, da NumPy ein Array zuweisen muss (relevant, wenn es häufig wiederholt wird)np.prod(np.array(range(1,21)))
reduce
.Wenn Sie das Importieren von Objekten und komplexere Bereiche von Python vermeiden möchten, können Sie eine einfache for-Schleife verwenden
quelle
Ab dem Start
Python 3.8
wurde eine.prod
Funktion in dasmath
Modul in der Standardbibliothek aufgenommen:Die Methode gibt das Produkt eines
start
Werts (Standard: 1) mal einer iterierbaren Zahl zurück:Wenn die Iterable leer ist, wird dies erzeugt
1
(oder derstart
Wert, falls angegeben).quelle
Hier sind einige Leistungsmessungen von meinem Computer. Relevant für den Fall, dass dies für kleine Eingaben in einer langen Schleife durchgeführt wird:
Ergebnisse:
Sie können sehen, dass Numpy bei kleineren Eingaben etwas langsamer ist, da es ein Array zuweist, bevor die Multiplikation durchgeführt wird. Achten Sie auch auf den Überlauf in Numpy.
quelle
multiply_functools
und zeichnenmultiply_numpy
sich durch zu sehen , die gewogennp
,functools
undoperator
Globals, gefolgt von Attribut - Lookups. Würde es Ihnen etwas ausmachen, zu Einheimischen zu wechseln?_reduce=functools.reduce,
_mul = operator.mul` in der Funktionssignatur, dannreturn _reduce(_mul, iterable)
im Körper usw.np.prod()
Option mit 100 oder mehr Elementen am schnellsten gestartet .Ich persönlich mag dies für eine Funktion, die alle Elemente einer generischen Liste miteinander multipliziert:
Es ist kompakt, verwendet einfache Dinge (eine Variable und eine for-Schleife) und fühlt sich für mich intuitiv an (es sieht so aus, als würde ich das Problem betrachten, nehmen Sie einfach eines, multiplizieren Sie es, multiplizieren Sie es mit dem nächsten und so weiter! )
quelle
for i in n:
, danntotal *= i
? wäre es nicht viel einfacher?Der einfache Weg ist:
quelle
np.prod(your_Array)
Numpy
hat dieprod()
Funktion, die das Produkt einer Liste zurückgibt, oder in diesem Fall, da es numpy ist, ist es das Produkt eines Arrays über einer bestimmten Achse:... oder Sie können einfach importieren
numpy.prod()
:quelle
Ich habe diese Frage heute gefunden, aber ich habe festgestellt, dass es nicht den Fall gibt
None
, in dem es in der Liste gibt. Die vollständige Lösung wäre also:Im Falle der Hinzufügung haben wir:
quelle
quelle
*
, sodass eval dies als Multiplikativ erkennt. Ich frage mich, wie die Leistung diesbezüglich ist, insbesondere im Vergleich zu anderen LösungenIch möchte dies folgendermaßen:
quelle
Das ist mein Code:
Ergebnis: ('1 * 1 * 2 * 3 * 4', 24)
quelle
Wie wäre es mit Rekursion?
quelle
Meine Lösung:
quelle
'' 'die einzige einfache Methode, um die Logik für die Schleife zu verstehen' ''
Runde = [2,5,7,7,9] x = 1 für i in Runde: x = i * x print (x)
quelle
Es ist sehr einfach, nichts zu importieren. Das ist mein Code. Dadurch wird eine Funktion definiert, die alle Elemente in einer Liste multipliziert und ihr Produkt zurückgibt.
quelle