J'ai besoin d'écrire une fonction qui prend une liste de nombres et les multiplie . Exemple:
[1,2,3,4,5,6]
me donnera 1*2*3*4*5*6
. Je pourrais vraiment utiliser votre aide.
python
list
multiplication
user1897814
la source
la source
lambda
pris une moyenne de 0,02 s / 1000 répétitions, alors queoperator.mul
j'ai pris une moyenne de 0,009 s / 1000 répétitions, ce qui rendoperator.mul
un ordre de grandeur plus rapide.operator.mul
va directement à C.math.prod([1,2,3,4,5,6])
. (nécessite bien sûr l'importation)Vous pouvez utiliser:
Voir
reduce
etoperator.mul
documentations pour une explication.Vous avez besoin de la
import functools
ligne en Python 3+.la source
reduce()
fonction a été supprimée de l'espace de noms global et placée dans lefunctools
module. Donc, en python3, vous devez direfrom functools import reduce
.lambda x,y: x*y
fonctionne également au lieu deoperator.mul
J'utiliserais le
numpy.prod
pour effectuer la tâche. Voir ci-dessous.la source
result = np.prod(mylist)
numpy.int32
par défaut comme ci-dessus 2) Pour les petites listes, cela sera considérablement plus lent, car NumPy doit allouer un tableau (pertinent s'il est répété souvent)np.prod(np.array(range(1,21)))
reduce
.Si vous voulez éviter d'importer quoi que ce soit et éviter les zones plus complexes de Python, vous pouvez utiliser une boucle for simple
la source
Au démarrage
Python 3.8
, une.prod
fonction a été intégrée aumath
module dans la bibliothèque standard:La méthode renvoie le produit d'une
start
valeur (par défaut: 1) multipliée par un itérable de nombres:Si l'itérable est vide, cela produira
1
(ou lastart
valeur, si elle est fournie).la source
Voici quelques mesures de performances de ma machine. Pertinent dans le cas où cela est effectué pour de petites entrées dans une boucle longue:
Résultats:
Vous pouvez voir que Numpy est un peu plus lent sur les petites entrées, car il alloue un tableau avant la multiplication. Faites également attention au débordement dans Numpy.
la source
multiply_functools
etmultiply_numpy
sont alourdis par avoir à regarder lesnp
,functools
etoperator
globals, suivi par des attributs lookups. Pourriez-vous passer aux locaux?_reduce=functools.reduce,
_mul = operator.mul` dans la signature de fonction puisreturn _reduce(_mul, iterable)
dans le corps, etc.np.prod()
option démarre devient plus rapide à 100 éléments ou plus.Personnellement, j'aime cela pour une fonction qui multiplie tous les éléments d'une liste générique:
Il est compact, utilise des choses simples (une variable et une boucle for) et me semble intuitif (il ressemble à ce que je penserais du problème, il suffit d'en prendre un, de le multiplier, puis de multiplier par le suivant, et ainsi de suite! )
la source
for i in n:
Alors pourquoi pastotal *= i
? ne serait-ce pas beaucoup plus simple?La manière la plus simple est:
la source
np.prod(your_Array)
Numpy
a laprod()
fonction qui retourne le produit d'une liste, ou dans ce cas puisque c'est numpy, c'est le produit d'un tableau sur un axe donné:... ou bien vous pouvez simplement importer
numpy.prod()
:la source
J'ai trouvé cette question aujourd'hui mais j'ai remarqué qu'elle n'a pas le cas où il y en a
None
dans la liste. Ainsi, la solution complète serait:En cas d'addition, nous avons:
la source
la source
*
, de sorte que eval le reconnaîtra comme un multiplicatif. Je me demande quelles sont les performances sur ce point, en particulier par rapport à d'autres solutionsJe voudrais cela de la manière suivante:
la source
Voici mon code:
résultat: ('1 * 1 * 2 * 3 * 4', 24)
la source
Que diriez-vous d'utiliser la récursivité?
la source
Ma solution:
la source
'' 'la seule méthode simple pour comprendre l'utilisation logique de la boucle' ''
Lap = [2,5,7,7,9] x = 1 pour i in Lap: x = i * x print (x)
la source
Il est très simple de ne rien importer. Ceci est mon code. Cela définira une fonction qui multiplie tous les articles d'une liste et renvoie leur produit.
la source