Python добавить элемент в кортеж



у меня есть некоторые object.ID-s, которые я пытаюсь сохранить в сеансе пользователя как кортеж. Когда я добавляю первый он работает, но кортеж выглядит как (u'2',) но когда я пытаюсь добавить нового с помощью mytuple = mytuple + new.id ошибка can only concatenate tuple (not "unicode") to tuple.

623   6  

6 ответов:

вам нужно сделать второй элемент 1-кортежа, например:

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

Начиная С Python 3.5 ( PEP 448) вы можете сделать распаковку в кортеже, списке, и дикт:

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

от кортежа к списку к кортежу:

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')

дело вот в чем: список-это mutable тип последовательности. Таким образом, вы можете изменить данный список, добавив или удалив элементы. Кортеж-это неизменяемые тип последовательности. Вы не можете изменить кортеж. Так что вы должны создать новая один.

Кортеж может только разрешить добавление 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')

#1 форма

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

#2 Форма

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

Comments

    Ничего не найдено.