En supposant que j'ai deux iterables de chiffres de la même longueurDéballer itérables en utilisant la carte
weights = range(0, 10)
values = range(0, 100, 10)
je dois compter la somme pondérée. Je sais que cela peut être fait avec la compréhension de la liste
weighted_sum = sum(weight * value for weight, value in zip(weights, values))
Je me demande si cela peut être fait en utilisant map
et operator.mul
comme
import operator
weighted_sum = sum(map(operator.mul, zip(weights, values)))
mais cela donne une erreur
Traceback (most recent call last):
File "<input>", line 3, in <module>
TypeError: op_mul expected 2 arguments, got 1
donc mon question: existe-t-il un moyen de faire passer les tuples déballés à l'aide de map
?
devrait-il pas 'weighted_sum = somme (carte (operator.mul, poids, valeurs)) 'sans le' zip '? Ou, comme indiqué dans la documentation 'map', peut-être que [' itertools.starmap'] (https://docs.python.org/3/library/itertools.html#itertools.starmap) aide –
@TobiasKienzler: merci , cela a fonctionné, vous devriez probablement le poster comme réponse –
Fait, bien que [Rahul suggéré] (https://stackoverflow.com/a/44039847/321973), en utilisant «numpy» est encore mieux –