2013-04-25 99 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)只是不必要的括號。