Je ne peux pas comprendre comment faire une fonction python qui peut calculer ceci:
List1=[3,5,6]
List2=[3,7,2]
et le résultat devrait être une nouvelle liste qui soustraite List2 de List1, List3=[0,-2,4]
! Je sais que je dois en quelque sorte utiliser la fonction zip. En faisant que je reçois: ([(3,3), (5,7), (6,2)])
, mais je ne sais pas quoi faire maintenant?
Essaye ça:
[x1 - x2 for (x1, x2) in Zip(List1, List2)]
Cela utilise Zip
, des compréhensions de liste et destructurants.
Vous pouvez utiliser compréhension de la liste , comme @matt suggéré. Vous pouvez également utiliser iTertools - plus spécifiquement, la fonction imap()
fonction:
>>> from itertools import imap
>>> from operator import sub
>>> a = [3,5,6]
>>> b = [3,7,2]
>>> imap(int.__sub__, a, b)
<itertools.imap object at 0x50e1b0>
>>> for i in imap(int.__sub__, a, b):
... print i
...
0
-2
4
Comme tous les funcitons iTertools, imap()
Retourne un itérateur. Vous pouvez générer une liste qui le passe comme paramètre pour le constructeur list()
:
>>> list(imap(int.__sub__, a, b))
[0, -2, 4]
>>> list(imap(lambda m, n: m-n, a, b)) # Using lambda
[0, -2, 4]
[~ # ~] Edit [~ # ~]: Comme suggéré par @cat ci-dessous, il serait préférable d'utiliser la fonction operator.sub()
avec imap()
:
>>> from operator import sub
>>> list(imap(sub, a, b))
[0, -2, 4]
Encore une autre solution ci-dessous:
>>> a = [3,5,6]
>>> b = [3,7,2]
>>> list(map(int.__sub__, a, b)) # for python3.x
[0, -2, 4]
>>> map(int.__sub__, a, b) # and for python2.x
[0, -2, 4]
Addition: Vérifiez simplement la référence Python de map
et vous verrez que vous pourriez passer plus que un iTable à map
Vous pouvez le faire de la manière suivante
List1 = [3,5,6]
List2 = [3,7,2]
ans = [List1[i]-List2[i] for i in xrange(min(len(List1), len(List2)))]
print ans
cette sortie [0, -2, 4]