Ma technique est similaire à Anand S Kumar (mais j'ai écrit quand il n'y avait que 1 autre réponse ici :)). Multiplier tous les éléments & puis diviser par chaque élément pour créer la liste de sortie est beaucoup plus efficace que d'effectuer n-1 multiplications pour chacun des n éléments, en particulier lorsque n est grand.
from operator import mul
from functools import reduce
def lagrange(seq):
#Find the product of all elements
prod = reduce(mul, seq, 1)
return [prod // i for i in seq]
a = [1, 7, 3, 4]
print a, lagrange(a)
a = [1, 2, 3, 4, 5, 6]
print a, lagrange(a)
sortie
[1, 7, 3, 4] [84, 12, 28, 21]
[1, 2, 3, 4, 5, 6] [720, 360, 240, 180, 144, 120]
En Python 2 reduce()
est intégré, mais vous pouvez l'importer à partir functools; dans Python 3, il n'est disponible que si vous l'importez à partir de functools. FWIW, j'ai appelé la fonction lagrange parce que le processus m'a rappelé Lagrange polynomial interpolation.
Bien sûr, cela ne fonctionnera que si tous les éléments ne sont pas nuls –