Python ajoute un élément au tuple


160

J'ai des object.ID-s que j'essaie de stocker dans la session utilisateur en tant que tuple. Quand j'ajoute le premier, cela fonctionne mais le tuple ressemble à (u'2',)mais quand j'essaye d'en ajouter un nouveau en utilisant mytuple = mytuple + new.idgot error can only concatenate tuple (not "unicode") to tuple.

Réponses:


294

Vous devez faire du deuxième élément un 1-tuple, par exemple:

a = ('2',)
b = 'z'
new = a + (b,)

11
Pourquoi vous avez besoin de cette virgule
SIslam

32
@SIslam Sans la virgule, il sera simplement interprété comme des crochets habituellement utilisés pour contourner l'ordre de priorité:(a+b)*c
Joseph Young

2
ouais, mais tu peux le faire à la new = a + bplace new = a + (b,). AFAICT, fonctionne de la même manière en python3 et python2.7.
ILMostro_7

5
@ ILMostro_7 dépend de ce que b est cependant
Jon Clements

Ou brièvement a += ('z',), comme mentionné dans la réponse ci-dessous
artu-hnrq

54

Depuis Python 3.5 ( PEP 448 ), vous pouvez effectuer une décompression dans un tuple, un ensemble de listes et un dict:

a = ('2',)
b = 'z'
new = (*a, b)

33

Du tuple à la liste au tuple:

a = ('2',)
b = 'b'

l = list(a)
l.append(b)

tuple(l)

Ou avec une liste plus longue d'éléments à ajouter

a = ('2',)
items = ['o', 'k', 'd', 'o']

l = list(a)

for x in items:
    l.append(x)

print tuple(l)

vous donne

>>> 
('2', 'o', 'k', 'd', 'o')

Le point ici est: La liste est un type de séquence mutable . Vous pouvez donc modifier une liste donnée en ajoutant ou en supprimant des éléments. Tuple est un type de séquence immuable . Vous ne pouvez pas changer un tuple. Vous devez donc en créer un nouveau .


5
Ce sera deux fois plus lent que d'ajouter simplement deux tuples
jamylak

2
Cependant, si vous notez OP vers lequel convertir listau début, ajoutez des éléments, puis à la toute fin, convertissez-le en tuplealors c'est la meilleure solution +1
jamylak

deux éléments, y compris le premier élément de la liste. mais vous avez raison, je devrais mieux ajouter un exemple de liste = plus long, voir ma modification
kiriloff

13

Tuple ne peut autoriser que des ajouts tuple. La meilleure façon de le faire est:

mytuple =(u'2',)
mytuple +=(new.id,)

J'ai essayé le même scénario avec les données ci-dessous, tout semble bien fonctionner.

>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')

11
>>> x = (u'2',)
>>> x += u"random string"

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    x += u"random string"
TypeError: can only concatenate tuple (not "unicode") to tuple
>>> x += (u"random string", )  # concatenate a one-tuple instead
>>> x
(u'2', u'random string')

2

Forme # 1

a = ('x', 'y')
b = a + ('z',)
print(b)

Forme # 2

a = ('x', 'y')
b = a + tuple('b')
print(b)

la deuxième option ne fonctionne pas. TypeError: 'int' object is not iterable
Obi Wan - PallavJha

1

En bout de ligne, le moyen le plus simple d'ajouter à un tuple est de placer l'élément ajouté avec des parenthèses et une virgule.

t = ('a', 4, 'string')
t = t + (5.0,)
print(t)

out: ('a', 4, 'string', 5.0)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.