3

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

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

谢谢!

4

2 回答 2

6

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

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

来自文档

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

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
于 2013-04-25T20:49:05.820 回答
0

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

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

于 2013-04-25T20:56:47.767 回答