Preciso escrever uma função que pegue uma lista de números e os multiplique . Exemplo:
[1,2,3,4,5,6]
vai me dar 1*2*3*4*5*6
. Eu realmente poderia usar sua ajuda.
python
list
multiplication
user1897814
fonte
fonte
lambda
levei uma média de 0,02s / 1000 repetições, enquanto queoperator.mul
uma média de 0,009s / 1000 repetições, tornandooperator.mul
a ordem de magnitude mais rápida.operator.mul
vai direto para C.math.prod([1,2,3,4,5,6])
. (requer importação, é claro)Você pode usar:
Veja
reduce
eoperator.mul
documentação para uma explicação.Você precisa da
import functools
linha em Python 3+.fonte
reduce()
função foi removida do espaço para nome global e colocada nofunctools
módulo. Então, em python3, você precisa dizerfrom functools import reduce
.lambda x,y: x*y
também funciona em vez deoperator.mul
Eu usaria o
numpy.prod
para executar a tarefa. Ver abaixo.fonte
result = np.prod(mylist)
numpy.int32
acima. 2) Para listas pequenas, isso será significativamente mais lento, pois o NumPy precisa alocar uma matriz (relevante se repetida com frequência)np.prod(np.array(range(1,21)))
reduce
.Se você deseja evitar importar qualquer coisa e evitar áreas mais complexas do Python, pode usar um loop for simples
fonte
Iniciando
Python 3.8
, uma.prod
função foi incluída nomath
módulo na biblioteca padrão:O método retorna o produto de um
start
valor (padrão: 1) vezes uma iterável de números:Se o iterável estiver vazio, isso produzirá
1
(ou ostart
valor, se fornecido).fonte
Aqui estão algumas medidas de desempenho da minha máquina. Relevante caso isso seja realizado para pequenas entradas em um loop de longa execução:
Resultados:
Você pode ver que o Numpy é um pouco mais lento em entradas menores, pois aloca um array antes da multiplicação. Além disso, preste atenção ao excesso no Numpy.
fonte
multiply_functools
emultiply_numpy
estão sob o peso de ter que procurar osnp
,functools
eoperator
globals, seguido por pesquisas de atributo. Você se importaria de mudar para os locais?_reduce=functools.reduce,
_mul = operator.mul` na assinatura da função e depoisreturn _reduce(_mul, iterable)
no corpo, etc.np.prod()
opção inicia se torna mais rápida com 100 elementos ou mais.Pessoalmente, gosto disso para uma função que multiplica todos os elementos de uma lista genérica:
É compacto, usa coisas simples (uma variável e um loop for) e parece intuitivo para mim (parece como eu pensaria no problema, basta pegar um, multiplicar, depois multiplicar pelo próximo, e assim por diante! )
fonte
for i in n:
entãototal *= i
? não seria muito mais simples?A maneira mais simples é:
fonte
np.prod(your_Array)
Numpy
tem aprod()
função que retorna o produto de uma lista ou, nesse caso, como está numpy, é o produto de uma matriz em um determinado eixo:... ou então você pode simplesmente importar
numpy.prod()
:fonte
Encontrei essa pergunta hoje, mas notei que ela não tem o caso em que há
None
na lista. Portanto, a solução completa seria:No caso de adição, temos:
fonte
fonte
*
, de modo que eval o reconheça como um multiplicativo. Eu me pergunto como o desempenho sobre isso é, especiamente em comparação com outras soluçõesGostaria disso da seguinte maneira:
fonte
Este é o meu código:
resultado: ('1 * 1 * 2 * 3 * 4', 24)
fonte
Que tal usar recursão?
fonte
Minha solução:
fonte
'' 'o único método simples para entender o uso lógico do loop' ''
Volta = [2,5,7,7,9] x = 1 para i na Volta: x = i * x impressão (x)
fonte
É muito simples, não importe nada. Este é o meu código. Isso definirá uma função que multiplica todos os itens de uma lista e retorna seu produto.
fonte