2013-04-25 95 views
2

我对以下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))

启动并使用相同的元组()命令,结果是((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),) 

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

谢谢!

+0

http://stackoverflow.com/questions/7992559/python-tuple-comma-syntax-rule – 2015-10-12 13:01:50

回答

6

Python使用一个尾随逗号的情况下的元组只有一个元素:

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

docs

一个特殊的问题是含有0或1 项目的元组的结构:该语法有一些额外的怪癖,以适应这些。空 元组由一对空括号构成;一个元组与 一个项目是通过跟随一个逗号(不是 足以将一个值括在括号中)的值构造的。

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

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

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