我对以下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),)
为什么第二种情况下的逗号和空元素?我该如何摆脱它?
谢谢!
答案 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。