Comment ajouter avec les tuples
J'ai un pseudo-code comme ceci:
if( b < a)
return (1,0)+foo(a-b,b)
Je veux écrire en python. Mais peut-python ajouter des tuples? Quelle est la meilleure manière de coder quelque chose comme ça?
Vous devez vous connecter pour publier un commentaire.
Voulez-vous faire de l'élément de wise plus, ou ajouter les tuples? Par défaut, python n'
Vous pouvez définir votre propre comme:
Aussi, comme @delnan commentaire fait clair, c'est mieux écrit que
ou même plus fonctionnel:
Puis faire
tuple(x + y for x, y in izip(xs, ys))
.myadd
en silence à tronquer le plus tuple de la longueur de la plus courte. Cela peut ou peut ne pas être un problème.J'irais pour
ou, de façon plus naturelle:
Contrairement à la réponse par highBandWidth, cette approche nécessite que les tuples être de la même longueur dans Python 2.7 ou plus tôt, au lieu d'élever une erreur TypeError. En Python 3,
map
est légèrement différente, de sorte que le résultat est un n-uplet de sommes d'une longueur égale à la plus courte dea
etb
.Si vous voulez du comportement de la troncation en Python 2, vous pouvez le remplacer
map
avecitertools.imap
:Si vous voulez
+
lui-même à agir de cette façon, vous pourriez sous-classetuple
et remplacer le plus:Il en va de même pour
__sub__
,__mul__
,__div__
,__gt__
(elementwise>
) etc. Plus d'informations sur ces opérateurs peuvent par exemple être trouvés ici (les opérations numériques) et ici (comparisions)Vous pouvez toujours ajouter des tuples en appelant l'original tuple plus:
tuple.__add__(a,b)
au lieu dea+b
. Ou de définir unappend()
fonction dans la nouvelle classe pour ce faire.