Bonjour, j'aurais besoin de votre aide svp. On a deux listes a et b qui ont le même nombre d'éléments. La première liste indique un nombre d'objets, la seconde liste indique le prix unitaire respectif de chaque objet. On doit trouver la dépense totale.
J'ai réussi à le faire sur un exemple concret. Mais, comme d'habitude, je coince au moment de faire le cas général en utilisant une fonction. Voici mon script, merci pour votre aide.
a = [1,2,3, 4, 5]
b = [6,7,8,9,10]
sum = 0
for i in range(len(a)):
c = a[i]*b[i]
sum+=c
print (sum)
130
Ben tu met juste un def et au lieu du print tu met un return quoi^^
Sinon, on pourrait aussi utiliser zip:
def produit(L1, L2):
L3 = []
for elt1, elt2 in zip(L1, L2):
L3.append(elt1*elt2)
return L3
#ou bien:
produit = lambda L1, L2: [elt1*elt2 for elt1, elt2 in zip(L1, L2)]
Edit: je ne sais pas si c'est pour un exercice ou bien pour un projet personnel, mais un dictionnaire me parait plus indiqué^^ (c'est même l'exemple typique d'utilisation d'un dictionnaire)
Je n'ai pas bien compris : tu cherches juste à multiplier les termes deux par deux, ou tu cherches à calculer la somme de ces multiplications ?
La solution la plus élégante en Python se ferait à l'aide de zip et d'une liste / un générateur en intension.
>>> u = [1, 2, 3, 4, 5]
>>> v = [6, 7, 8, 9, 10]
>>> [a * b for (a, b) in zip(u, v)] # multiplications terme à terme
[6, 14, 24, 36, 50]
>>> sum(a * b for (a, b) in zip(u, v)) # somme
130
Pour en faire une fonction, il suffit de lui faire prendre les deux listes en paramètre, et de retourner la valeur souhaitée.
def dot_product(u, v):
return sum(a * b for (a, b) in zip(u, v))
Merci beaucoup Derzal et entwanne. Il s'agit en effet d'un exercice puisque je suis en train d'apprendre les listes. Grâce à vous, j'ai pu arriver à écrire un script convenable.
from operator import mul
f = lambda lst1, lst2: sum(map(mul, lst1, lst2))
print(f([1, 2, 3, 4, 5], [6, 7, 8, 9, 10]))
PS: Par contre j'ai l'impression que tu n'as pas compris comment faire des fonctions. Aussi je te conseille vraiment de passer du temps à comprendre ce concept, qui est somme toute assez simple et pourtant fondamental. Notamment comprendre l'utilisation des paramètres et du return. La première fonction de Derzal fera très bien l'affaire pour t'aider dans cette compréhension (les autres tu peux les zapper pour l'instant).
Je vous remercie, chers Olygrim et talpa. Je dois admettre que, pour l'instant, je ne comprends rien à vos deux suggestions car je n'ai jamais entendu parler de "lambda, map, mul, reduce, functools...". J'espère bien qu'un prochain jour, ce sera pour moi clair comme de l'eau de roche; je reviendrai alors avec plaisir sur ce post pour mesurer mes progrès en Python... Encore merci et à bientôt.
Multiplier deux listes terme à terme
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique