186 votes

Comment effectuer une multiplication élément par élément de deux listes ?

Je veux effectuer une multiplication par élément, pour multiplier deux listes ensemble par valeur en Python, comme on peut le faire en Matlab.

Voici comment je procéderais en Matlab.

a = [1,2,3,4]
b = [2,3,4,5]
a .* b = [2, 6, 12, 20]

Une compréhension de liste donnerait 16 entrées de liste, pour chaque combinaison x * y de x de a y y de b . Je ne suis pas sûr de la façon de cartographier cela.

Si quelqu'un est intéressé par la raison, j'ai un ensemble de données, et je veux les multiplier par Numpy.linspace(1.0, 0.5, num=len(dataset)) =) .

11voto

Mahesh24 Points 1011

Vous pouvez multiplier en utilisant lambda

foo=[1,2,3,4]
bar=[1,2,5,55]
l=map(lambda x,y:x*y,foo,bar)

10voto

Turtleneck Points 101

C'est un moyen assez intuitif de le faire :

a = [1,2,3,4]
b = [2,3,4,5]
ab = []                        #Create empty list
for i in range(0, len(a)):
     ab.append(a[i]*b[i])      #Adds each element to the list

4voto

sg7 Points 4137

Le site map peut être très utile ici. Utilisation de map on peut appliquer n'importe quelle fonction à chaque élément d'un itérable.

Python 3.x

>>> def my_mul(x,y):
...     return x*y
...
>>> a = [1,2,3,4]
>>> b = [2,3,4,5]
>>>
>>> list(map(my_mul,a,b))
[2, 6, 12, 20]
>>>

Bien sûr :

map(f, iterable)

est équivalent à

[f(x) for x in iterable]

Nous pouvons donc obtenir notre solution via :

>>> [my_mul(x,y) for x, y in zip(a,b)]
[2, 6, 12, 20]
>>>

En Python 2.x map() signifie : appliquer une fonction à chaque élément d'une itérable et construire une nouvelle liste. En Python 3.x, map construire des itérateurs au lieu de listes.

Au lieu de my_mul nous pourrions utiliser mul opérateur

Python 2.7

>>>from operator import mul # import mul operator
>>>a = [1,2,3,4]
>>>b = [2,3,4,5]
>>>map(mul,a,b)
[2, 6, 12, 20]
>>>

Python 3.5 et plus

>>> from operator import mul
>>> a = [1,2,3,4]
>>> b = [2,3,4,5]
>>> [*map(mul,a,b)]
[2, 6, 12, 20]
>>>

Veuillez noter que depuis map() construit un itérateur, nous utilisons * opérateur de déballage des itérables pour obtenir une liste. L'approche par déballage est un peu plus rapide que l'approche par défaut. list constructeur :

>>> list(map(mul,a,b))
[2, 6, 12, 20]
>>>

4voto

aady Points 25

Pour les grandes listes, on peut le faire à la manière d'un iter :

product_iter_object = itertools.imap(operator.mul, [1,2,3,4], [2,3,4,5])

product_iter_object.next() donne chacun des éléments de la liste de sortie.

La sortie serait la longueur de la plus courte des deux listes d'entrée.

4voto

user3680588 Points 72

Créer un tableau de uns ; multiplie chaque liste par le tableau ; convertir un tableau en une liste

import numpy as np

a = [1,2,3,4]
b = [2,3,4,5]

c = (np.ones(len(a))*a*b).tolist()

[2.0, 6.0, 12.0, 20.0]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X