Python将项添加到元组

Gor*_*ran 141 python tuples python-2.7

我有一些object.ID-s,我尝试将其作为元组存储在用户会话中.当我添加第一个它工作,但元组看起来像(u'2',),但当我尝试使用获取mytuple = mytuple + new.id错误添加新的can only concatenate tuple (not "unicode") to tuple.

Jon*_*nts 266

您需要将第二个元素设为1元组,例如:

a = ('2',)
b = 'z'
new = a + (b,)
Run Code Online (Sandbox Code Playgroud)

  • @SIslam如果没有逗号,它将被解释为通常用于绕过优先顺序的括号:`(a + b)*c` (30认同)
  • 为什么你需要这个逗号 (9认同)
  • 或者简单地说`a += ('z',)`,如[下面的答案](/sf/answers/1717458641/)中所述 (6认同)
  • @ ILMostro_7取决于b是什么 (5认同)
  • 是的,但是你可以做`new = a + b` 而不是`new = a + (b,)`。AFAICT,在 python3 和 python2.7 中工作相同。 (2认同)

nit*_*ely 46

从Python 3.5(PEP 448)开始,您可以在元组,列表集和字典中进行解包:

a = ('2',)
b = 'z'
new = (*a, b)
Run Code Online (Sandbox Code Playgroud)

  • @nocibambi 逗号使它成为一个元组,没有它它只是一个字符串。尝试 `a = ('23')` 并且 `new` 变成 `('2', '3', 'z')`。如果添加逗号,则会得到“('23', 'z')”。 (3认同)

kir*_*off 32

从元组到列表到元组:

a = ('2',)
b = 'b'

l = list(a)
l.append(b)

tuple(l)
Run Code Online (Sandbox Code Playgroud)

或者使用更长的要追加的项目列表

a = ('2',)
items = ['o', 'k', 'd', 'o']

l = list(a)

for x in items:
    l.append(x)

print tuple(l)
Run Code Online (Sandbox Code Playgroud)

给你

>>> 
('2', 'o', 'k', 'd', 'o')
Run Code Online (Sandbox Code Playgroud)

这里的要点是:List是一个可变序列类型.因此,您可以通过添加或删除元素来更改给定列表.元组是一种不可变的序列类型.你不能改变一个元组.所以你必须创建一个新的.

  • 这将是添加两个元组的两倍慢 (4认同)
  • 但是,如果您注意到OP首先要转换为`list`,添加项,然后最后转换为`tuple`,那么这是最好的解决方案+1 (2认同)

小智 12

元组只能允许添加tuple它.最好的方法是:

mytuple =(u'2',)
mytuple +=(new.id,)
Run Code Online (Sandbox Code Playgroud)

我用下面的数据尝试了相同的场景,它似乎都运行良好.

>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 11

>>> 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')
Run Code Online (Sandbox Code Playgroud)


小智 9

#1 表格

a = ('x', 'y')
b = a + ('z',)
print(b)
Run Code Online (Sandbox Code Playgroud)

#2 形式

a = ('x', 'y')
b = a + tuple('b')
print(b)
Run Code Online (Sandbox Code Playgroud)

  • 第二个选项不起作用。`类型错误:'int'对象不可迭代` (3认同)