2010-08-06 6 views
8

La question est un peu trompeuse, car un tuple est immutable. Ce que je veux est:Python: comment changer (dernier) élément de tuple?

Avoir un tuple a = (1, 2, 3, 4) obtenir un tuple b qui est exactement comme a sauf pour le dernier argument qui est, par exemple, deux fois le dernier élément de a.

=> b == (1, 2, 3, 8)

+3

Si vous pouvez l'aider, pensez à utiliser une liste si vous allez effectuer une manipulation in situ des éléments. – user37078

+0

Je pense qu'il est plus logique d'utiliser des tuples dans mon scénario - j'ai besoin de représenter les versions du programme, sous la forme 'major.minor.branch.build -> (majeur, mineur, branche, build)' et je dois obtenir la version de 'build précédente' à partir d'une version donnée –

+0

Vous pouvez également utiliser la classe 'distutils.version.StrictVersion' pour les numéros de version. – SiggyF

Répondre

19
b = a[:-1] + (a[-1]*2,) 

Ce que je fais ici est concaténation de deux tuples, le premier contenant tout, mais le dernier élément, et un nouveau tuple contenant la mutation de l'élément final. Le résultat est un nouveau tuple contenant ce que vous voulez.

Notez que pour + pour renvoyer un tuple, les deux opérandes doivent être un tuple.

+2

Que diriez-vous de '(a [-1] * 2,)'? Ce qui précède renvoie une erreur TypeError. (la virgule de fin est nécessaire pour un tuple à un item) – Skilldrick

+0

@Skilldrick merci, édité – Ivo

6

je ferais quelque chose comme:

b=list(a) 
b[-1]*=2 
b=tuple(b) 
+1

+1: c'est très lisible, et flexible. – EOL

5

Voici une façon de le faire:

>>> a = (1, 2, 3, 4) 
>>> b = a[:-1] + (a[-1]*2,) 
>>> a 
(1, 2, 3, 4) 
>>> b 
(1, 2, 3, 8) 

Alors ce qui se passe sur la deuxième ligne? a [: - 1] signifie tous sauf le dernier élément. a [-1] est le dernier élément, et nous le multiplions par deux. Le (a [-1] * 2,) transforme le résultat en un tuple, et le tuple en tranches est concaténé avec lui en utilisant l'opérateur +. Le résultat est mis en b.

Vous pouvez probablement adapter cela à votre cas spécifique.

Questions connexes