为什么不能将这两个元组连接在一起?

时间:2018-09-28 23:44:51

标签: python tuples

我正在尝试使用Python 3.6中的重载+运算符连接两个元组。如果像第一个示例一样包含括号,我没有问题,但是如果像第二个示例一样省略括号,则会出现错误。我收到的消息是“一元+的错误操作数类型:'tuple'”。谁能解释发生了什么事?

  

newtup =(3,)+(2,4)

     

newtup = 3,+(2,4)

5 个答案:

答案 0 :(得分:4)

这是一个优先问题。 3, + (2, 4)被解析为具有元素3+(2, 4)的元组,而不是添加3,(2, 4)的元组。您需要括号。

答案 1 :(得分:3)

它试图将第二行解析为

no is in the dictionary act is in the dictionary amp is in the dictionary Error: The Following Error occured: list index out of range xibber is NOT in the dictionary Error: The Following Error occured: list index out of range xyz is NOT in the dictionary

然后,您看到像(3, + (2,4))中那样使用一元+和元组。不允许这样做,因此会出现错误。逗号具有很宽的优先级(即,它们消耗尽可能多的字符,比*更接近+)。其原因在于(a = +5biglongexpression1)切勿将两个biglongexpression2混在一起。其他所有内容都更重要,应该在逗号之前进行评估,因此biglongexpression在逗号之前进行评估-因为它是+(2,4)

答案 2 :(得分:0)

正在执行的操作:

3, + (2,4)

它基本上简化为两部分3,+(2,4),第二部分无效,因此您可以尝试在python 3中进行new-unpacking。

(3,*(2,4))

如果在python2上,仅使用第二个示例。

答案 3 :(得分:0)

一元运算符+期望右侧的操作数有效(int,float等)。

在您的代码3, + (2, 4)中,您将元组(2, 4)作为+的操作数,它不是有效的操作数,因此错误也是如此。

在您的代码中:

newtup = (3,) + (2, 4)

这些是2个独立的元组(3,)(2,4),因此可以正常工作。

newtup = 3, + (2, 4)

这里是一个包含两个元素3+(2, 4)的单个元组,由于上述原因而失败。

答案 4 :(得分:-1)

简单;在第一行上,您将创建一个由2个元组组成的新元组。 在第二行中,您正在向一个元组添加一个int。检查一下。

 x, y=3, (2,4) # assign  x and y to 3, and (2,4) respectively
 print type(y), type(x)
 <type 'tuple'> <type 'int'>