99 votes

Soustraire 2 listes dans Python

En ce moment, j'ai des valeurs vector3 représentées sous forme de listes. Y a-t-il un moyen de soustraire 2 de ces valeurs vector3 similaires, comme

[2,2,2] - [1,1,1] = [1,1,1]

Dois-je utiliser des tuples ?

Si aucun d'entre eux ne définit ces opérandes sur ces types, puis-je le définir à la place ?

Si ce n'est pas le cas, dois-je créer une nouvelle classe vector3 ?

90voto

Nikhil Chelliah Points 3463

Voici une alternative à la liste des compréhensions. Map itére à travers la (les) liste (s) (ces derniers arguments), ce qui se fait de manière simultanée, et transmet leurs éléments en tant qu'arguments à la fonction (le premier arg). Il renvoie la liste résultante.

import operator
map(operator.sub, a, b)

Ce code a moins de syntaxe (ce qui est plus esthétique pour moi), et apparemment il est 40% plus rapide pour les listes de longueur 5 (voir commentaire de Bobince). Néanmoins, l'une ou l'autre solution fonctionnera.

17voto

recursive Points 34729

Si vos listes sont a et b, vous pouvez faire :

map(int.__sub__, a, b)

Mais vous ne devriez probablement pas. Personne ne saura ce que ça veut dire.

12voto

mikelikespie Points 2560

Je devrais aussi recommander NumPy

Non seulement il est plus rapide pour faire des mathématiques vectorielles, mais il a également une tonne de fonctions de commodité.

Si vous voulez quelque chose d'encore plus rapide pour les vecteurs 1d, essayez vop

C'est similaire à MatLab, mais gratuit et tout. Voici un exemple de ce que vous feriez

from numpy import matrix
a = matrix((2,2,2))
b = matrix((1,1,1))
ret = a - b
print ret
>> [[1 1 1]]

Boum.

11voto

user3503711 Points 39
import numpy as np
a = [2,2,2]
b = [1,1,1]
np.subtract(a,b)

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