将元素添加到元组列表(Python)

时间:2014-07-13 16:03:05

标签: python tuples

从Knuth实现Grays Code的递归定义我需要向元组添加值,我有:

In [54]: tuple_one = (1,0,0)

In [55]: tuple_one
Out[55]: (1, 0, 0)

In [56]: tuple_one += (1,)

In [57]: tuple_one
Out[57]: (1, 0, 0, 1)

但是,如果我尝试分配以上内容,我会收到语法错误

In [63]: B = tuple_one += (1,)
  File "<ipython-input-63-537be8a059fc>", line 1
    B = tuple_one += (1,)
               ^
SyntaxError: invalid syntax

这是为什么? 关心保罗

3 个答案:

答案 0 :(得分:2)

Explanation from Python Docs

增强分配评估目标(与正常分配语句不同)仅评估一次。像x + = 1这样的增强赋值表达式可以重写为x = x + 1,以实现类似的但不完全相等的效果。在增强版本中,x仅评估一次。

  

此外,如果可能,实际操作是就地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。

在单个语句中分配元组和多个目标的例外,扩充赋值语句完成的赋值处理方式与正常赋值相同

因此,在单个语句中分配元组或/和多个目标时,请不要使用扩充赋值语句。

相反,请使用

B = tuple_one = tuple_one + (1,)

答案 1 :(得分:1)

这不是元组列表。它只是一个元组。

它不起作用的原因是因为它实际上是无效的语法。它实际上等于

B = tuple_one = tuple_one + (1,)

如果你想保存tuple_one的值,那就用两行

来做
tuple_one += (1,)
B = tuple_one

如果您不这样做,请使用+运算符

B = tuple_one + (1,)

答案 2 :(得分:0)

您的“元组列表”不是元组列表,而是单个列表。你可以说它不是一个列表,因为没有方括号([]

+=用于进行适当修改,因此将使用a+=1代替a = a+1。区别在于a+1 返回 a1的值,但+=1不会返回任何内容:

>>> a = 1
>>> x = a+=1 #DOES NOT WORK
  File "<stdin>", line 1
    x = a+=1
          ^
SyntaxError: invalid syntax
>>> x = a+1
>>> x
2
>>> 

以下是您编辑过的专栏:

B = tuple_one + (1,)