Python добавить элемент в кортеж
у меня есть некоторые object.ID-s, которые я пытаюсь сохранить в сеансе пользователя как кортеж. Когда я добавляю первый он работает, но кортеж выглядит как (u'2',) но когда я пытаюсь добавить нового с помощью mytuple = mytuple + new.id ошибка can only concatenate tuple (not "unicode") to tuple.
6 ответов:
Начиная С 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')
Comments