【问题标题】:extra empty element when removing an element from a tuple从元组中删除元素时额外的空元素
【发布时间】:2013-04-19 22:01:18
【问题描述】:

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

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

谢谢!

【问题讨论】:

标签: python element tuples


【解决方案1】:

如果元组只有一个元素,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',)

【讨论】:

    【解决方案2】:

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

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

    【讨论】: