Muszę napisać funkcję, która pobiera listę liczb i mnoży je razem. Przykład:
[1,2,3,4,5,6]
da mi 1*2*3*4*5*6
. Naprawdę mógłbym skorzystać z twojej pomocy.
python
list
multiplication
użytkownik1897814
źródło
źródło
lambda
wziąłem średnio 0,02 s / 1000 powtórzeń, podczasoperator.mul
gdy średnio 0,009 s / 1000 powtórzeń,operator.mul
przyspieszając rząd wielkości.operator.mul
idzie prosto do C.math.prod([1,2,3,4,5,6])
. (wymaga importu oczywiście)Możesz użyć:
Zobacz wyjaśnienia
reduce
ioperator.mul
dokumentacje.Potrzebujesz
import functools
linii w Pythonie 3+.źródło
reduce()
funkcja została usunięta z globalnej przestrzeni nazw i umieszczona wfunctools
module. Więc w python3 musisz powiedziećfrom functools import reduce
.lambda x,y: x*y
działa również zamiastoperator.mul
Użyłbym tego
numpy.prod
do wykonania zadania. Patrz poniżej.źródło
result = np.prod(mylist)
numpy.int32
jak wyżej 2) W przypadku małych list będzie to znacznie wolniejsze, ponieważ NumPy musi przydzielić tablicę (istotne, jeśli często się powtarzają)np.prod(np.array(range(1,21)))
reduce
.Jeśli chcesz uniknąć importowania czegokolwiek i uniknąć bardziej złożonych obszarów Pythona, możesz użyć prostej pętli for
źródło
Zaczynając
Python 3.8
,.prod
funkcja została dołączona domath
modułu w standardowej bibliotece:Metoda zwraca iloczyn
start
wartości (domyślnie: 1) razy iterowalnej liczby:Jeśli iterowalny jest pusty, wygeneruje
1
(lubstart
wartość, jeśli podano).źródło
Oto kilka pomiarów wydajności z mojej maszyny. Istotne w przypadku, gdy jest to wykonywane dla małych wejść w długo działającej pętli:
Wyniki:
Widać, że Numpy jest nieco wolniejszy na mniejszych wejściach, ponieważ przydziela tablicę przed wykonaniem mnożenia. Uważaj też na przepełnienie Numpy.
źródło
multiply_functools
imultiply_numpy
są przygnieciony konieczności patrzenia w góręnp
,functools
ioperator
globalnych, a następnie przez wyszukiwań atrybutów. Czy miałbyś coś przeciwko przestawieniu się na mieszkańców?_reduce=functools.reduce,
_mul = operator.mul` w sygnaturze funkcji, a następniereturn _reduce(_mul, iterable)
w treści itd.np.prod()
opcja zaczyna się najszybciej przy 100 lub więcej elementach.Osobiście podoba mi się ta funkcja, która zwielokrotnia wszystkie elementy listy ogólnej:
Jest kompaktowy, wykorzystuje proste rzeczy (zmienną i pętlę for) i jest dla mnie intuicyjny (wygląda na to, jak bym pomyślał o problemie, wystarczy wziąć jeden, pomnożyć go, a następnie pomnożyć przez następny i tak dalej! )
źródło
for i in n:
, wtedytotal *= i
? czy nie byłoby to o wiele prostsze?Prosty sposób to:
źródło
np.prod(your_Array)
Numpy
maprod()
funkcję, która zwraca iloczyn listy, lub w tym przypadku, ponieważ jest numpy, jest iloczynem tablicy nad daną osią:... lub możesz po prostu zaimportować
numpy.prod()
:źródło
Znalazłem to pytanie dzisiaj, ale zauważyłem, że nie ma przypadku, w którym są
None
na liście. Tak więc kompletnym rozwiązaniem byłoby:W przypadku dodania mamy:
źródło
źródło
*
, tak że eval rozpozna to jako multiplikatyw. Zastanawiam się, jak na tym wygląda wydajność, szczególnie w porównaniu z innymi rozwiązaniamiChciałbym to w następujący sposób:
źródło
To jest mój kod:
wynik: („1 * 1 * 2 * 3 * 4”, 24)
źródło
Co powiesz na użycie rekurencji?
źródło
Moje rozwiązanie:
źródło
'' jedyna prosta metoda zrozumienia logiki użycia pętli ''
Lap = [2,5,7,7,9] x = 1 dla i na Lap: x = i * x print (x)
źródło
To bardzo proste, nic nie importuj. To jest mój kod. Spowoduje to zdefiniowanie funkcji, która zwielokrotnia wszystkie pozycje na liście i zwraca ich produkt.
źródło