从元组中删除元素时的额外空元素

时间:2013-04-25 20:47:21

标签: python element tuples

我对以下python结果有疑问。 假设我有一个元组:

a = ( (1,1), (2,2), (3,3) )

我想删除(2,2),我正在使用以下代码执行此操作:

 tuple([x for x in a if x != (2,2)])

这很好用,结果是:( (1,1), (3,3) ),就像我期望的那样。

但假设我从a = ( (1,1), (2,2) )

开始

并使用相同的tuple()命令,结果为( (1,1), ),而我希望它为((1,1))

简而言之

>>> a = ( (1,1), (2,2), (3,3) )
>>> tuple([x for x in a if x != (2,2)])
((1, 1), (3, 3))
>>> a = ( (1,1), (2,2) )
>>> tuple([x for x in a if x != (2,2)])
((1, 1),)

为什么第二种情况下的逗号和空元素?我该如何摆脱它?

谢谢!

2 个答案:

答案 0 :(得分:6)

Python使用尾随逗号,以防元组只有一个元素:

In [21]: type((1,))
Out[21]: tuple

来自docs

  

一个特殊问题是构造包含0或1的元组   items:语法有一些额外的怪癖来容纳这些。空   元组是由一对空括号构成的;一个元组   通过使用逗号跟随值来构造一个项目(它不是   足以将一个值括在括号中。)

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

答案 1 :(得分:0)

它表示一个单元素元组,只是为了防止混淆。

(1,)是一个元组,而(1)只是带有不必要括号的数字1。