Czy istnieje wbudowana funkcja product () w Pythonie? [duplikat]
To pytanie ma już odpowiedź tutaj:
Przeglądałem samouczek i książkę, ale nie mogę znaleźć żadnej wzmianki o wbudowanej funkcji produktu, tj. tego samego typu co sum (), ale nie mogłem znaleźć niczego takiego jak prod()
.
Is the only way I could znajdź produkt pozycji na liście importując operator mul()
?
4 answers
Wypowiedź
Tak, zgadza się. Guido odrzucił pomysł na wbudowaną funkcję prod (), ponieważ uważał, że jest ona rzadko potrzebna.Alternatywa z reduce ()
Jak zasugerowałeś, nie jest trudno zrobić własne za pomocą zmniejszyć() oraz centrala.mul():
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
W Pythonie 3, zmniejszyć() funkcja została przeniesiona do modułu functools , więc trzeba dodaj:
from functools import reduce
Przypadek szczególny: faktorie
Na marginesie, podstawowym motywującym przypadkiem użycia prod () jest obliczanie faktorii. Mamy już wsparcie dla tego w module matematycznym :
>>> import math
>>> math.factorial(10)
3628800
Alternatywa z logarytmami
Jeśli Twoje dane składają się z pływaków, możesz obliczyć produkt używając sum () {[15] } z wykładnikami i logarytmami:
>>> 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 17:27:31
Nie ma product
w Pythonie, ale można go zdefiniować jako
def product(iterable):
return reduce(operator.mul, iterable, 1)
Lub, jeśli masz NumPy, użyj numpy.product
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-30 22:26:26
Ponieważ funkcja reduce () została usunięta w Pythonie 3.0, musisz przyjąć inne podejście.
Możesz użyć functools.reduce()
, aby Zmiana się nie powiodła:
product = functools.reduce(operator.mul, iterable, 1)
Lub, jeśli chcesz podążać za duchem zespołu Pythona (który usunął reduce()
, ponieważ uważają, że for
byłoby bardziej czytelne), zrób to za pomocą pętli:
product = 1
for x in iterable:
product *= x
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 21:03:36
from numpy import multiply, product
list1 = [2,2,2]
list2 = [2,2,2]
mult = 3
prod_of_lists = multiply(list1,list2)
>>>[4,4,4]
prod_of_list_by_mult = multiply(list1,mult)
>>>[6,6,6]
prod_of_single_array = product(list1)
>>>8
Numpy ma wiele naprawdę fajnych funkcji dla list!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-30 22:27:17