Відповіді:
Ви повинні зробити другий елемент 1-кортежем, наприклад:
a = ('2',)
b = 'z'
new = a + (b,)
(a+b)*c
new = a + b
замість цього new = a + (b,)
. AFAICT, працює однаково в python3 та python2.7.
Від кортежу до списку до кортежу:
a = ('2',)
b = 'b'
l = list(a)
l.append(b)
tuple(l)
Або з більш довгим списком елементів, які потрібно додати
a = ('2',)
items = ['o', 'k', 'd', 'o']
l = list(a)
for x in items:
l.append(x)
print tuple(l)
дає тобі
>>>
('2', 'o', 'k', 'd', 'o')
Суть у цьому: Список - це тип, що змінюється послідовно. Таким чином, ви можете змінити заданий список, додавши або видаливши елементи. Кортеж - це непорушний тип послідовностей. Ви не можете змінити кортеж. Тож вам доведеться створити нову .
list
на початок, додайте елементи, а потім в самому кінці конвертуйте, tuple
то це найкраще рішення +1
Кортеж може дозволяти лише додавати tuple
його. Найкращий спосіб це зробити:
mytuple =(u'2',)
mytuple +=(new.id,)
Я спробував той самий сценарій із наведеними нижче даними, все, здається, працює нормально.
>>> 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)
TypeError: 'int' object is not iterable