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

use*_*962 2 python tuples element

我有一个关于以下python结果的问题.假设我有一个元组:

a = ( (1,1), (2,2), (3,3) )
Run Code Online (Sandbox Code Playgroud)

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

 tuple([x for x in a if x != (2,2)])
Run Code Online (Sandbox Code Playgroud)

这很好,结果是:( (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),)
Run Code Online (Sandbox Code Playgroud)

为什么逗号和空元素在第二种情况下?我怎么摆脱它呢?

谢谢!

Ash*_*ary 6

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

In [21]: type((1,))
Out[21]: tuple
Run Code Online (Sandbox Code Playgroud)

来自文档:

一个特殊的问题是构造包含0或1项的元组:语法有一些额外的怪癖来适应这些.空元组由一对空括号构成; 通过使用逗号跟随值来构造具有一个项目的元组(仅在括号中包含单个值是不够的).

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
Run Code Online (Sandbox Code Playgroud)