web-dev-qa-db-fra.com

Python ajoute un objet au tuple

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

110
Goran

Vous devez transformer le second élément en 1-Tuple, par exemple:

a = ('2',)
b = 'z'
new = a + (b,)
219
Jon Clements

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

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

De Tuple à liste à 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 mutable sequence. Vous pouvez donc modifier une liste donnée en ajoutant ou en supprimant des éléments. Le tuple est un type immuable . Vous ne pouvez pas changer un tuple. Vous devez donc créer un nouveau un.

24
octoback

Tuple ne peut permettre que l’ajout de 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
user3798348
>>> 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')
10
jamylak

Formulaire n ° 1

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

Formulaire n ° 2

a = ('x', 'y')
b = a + Tuple('b')
print(b)
0
britodfbr