Ich habe einige object.ID-s, die ich in der Benutzersitzung als Tuple speichern möchte. Wenn ich das erste hinzufüge, funktioniert es, aber Tuple sieht aus wie (u'2',)
, aber wenn ich versuche, ein neues hinzuzufügen, das mytuple = mytuple + new.id
verwendet, wurde Fehler can only concatenate Tuple (not "unicode") to Tuple
angezeigt.
Sie müssen das zweite Element zu einem 1-Tuple machen, zB:
a = ('2',)
b = 'z'
new = a + (b,)
Seit Python 3.5 ( PEP 448 ) können Sie das Auspacken innerhalb eines Tuples, eines Listensets und eines Diktats durchführen:
a = ('2',)
b = 'z'
new = (*a, b)
Von Tuple zur Liste zu Tuple:
a = ('2',)
b = 'b'
l = list(a)
l.append(b)
Tuple(l)
Oder mit einer längeren Liste von Elementen, die angehängt werden sollen
a = ('2',)
items = ['o', 'k', 'd', 'o']
l = list(a)
for x in items:
l.append(x)
print Tuple(l)
gibt Ihnen
>>>
('2', 'o', 'k', 'd', 'o')
Der Punkt hier ist: Liste ist ein mutable Sequenztyp. Sie können also eine bestimmte Liste ändern, indem Sie Elemente hinzufügen oder entfernen. Tuple ist ein unveränderlicher Sequenztyp. Sie können einen Tuple nicht wechseln. Sie müssen also ein neues erstellen.
Tuple kann nur das Hinzufügen von Tuple
zulassen. Am besten geht es:
mytuple =(u'2',)
mytuple +=(new.id,)
Ich habe das gleiche Szenario mit den unten angegebenen Daten ausprobiert, alles scheint gut zu funktionieren.
>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')
>>> 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')
a = ('x', 'y')
b = a + ('z',)
print(b)
a = ('x', 'y')
b = a + Tuple('b')
print(b)