Existe-t-il de toute façon pour que les opérations de tuple en Python fonctionnent comme ceci:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
au lieu de:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Je sais que cela fonctionne comme ça parce que les méthodes __add__
et __mul__
sont définies pour fonctionner comme ça. Alors le seul moyen serait de les redéfinir?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
serait l'équivalent d'une compréhension de liste.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Utilisation de tous les éléments intégrés.
la source
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Cette solution ne nécessite pas d'importation:
la source
map(sum, zip(a, b))
)En quelque sorte combiné les deux premières réponses, avec un ajustement du code d'ironfroggy pour qu'il renvoie un tuple:
Remarque: utilisez
self.__class__
au lieu destuple
pour faciliter le sous-classement.la source
donne
array([4,4,4])
.Voir http://www.scipy.org/Tentative_NumPy_Tutorial
la source
La compréhension du générateur pourrait être utilisée à la place de la carte. La fonction de carte intégrée n'est pas obsolète mais elle est moins lisible pour la plupart des gens que la compréhension de liste / générateur / dict, donc je vous recommande de ne pas utiliser la fonction de carte en général.
la source
solution simple sans définition de classe qui retourne tuple
la source
Toute solution de générateur. Je ne suis pas sûr des performances (itertools est rapide, cependant)
la source
Oui. Mais vous ne pouvez pas redéfinir les types intégrés. Vous devez les sous-classer:
la source
encore plus simple et sans utiliser de carte, vous pouvez le faire
la source
Je sous-classe actuellement la classe "tuple" pour surcharger +, - et *. Je trouve que cela rend le code beau et l'écriture du code plus facile.
la source
Au cas où quelqu'un aurait besoin de faire la moyenne d'une liste de tuples:
la source