如何创建只有一个元素的元组

在下面的例子中,我希望所有的元素都是元组,为什么一个元组只包含一个字符串,而它却被转换成了一个字符串呢?

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
...     print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
96222 次浏览

前两个例子不是元组,它们是字符串:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]

当元组只包含一个字符串时,为什么要转换成字符串呢?

a = [('a'), ('b'), ('c', 'd')]

因为前两个元素不是元组,它们只是字符串。括号不会自动使它们成为元组。您必须在字符串后面添加一个逗号,以指示 python 应该是一个 tuple。

>>> type( ('a') )
<type 'str'>


>>> type( ('a',) )
<type 'tuple'>

要修复示例代码,请在此处添加逗号:

>>> a = [('a',), ('b',), ('c', 'd')]


^       ^

来自 巨蟒文档:

一个特殊的问题是包含0或1个项的元组的构造: 语法有一些额外的特点来适应这些特点。空元组由一对空括号构成; 带有一个项的元组由一个带逗号的值构成(在括号中包含单个值是不够的)。丑陋,但很有效。

如果你真的很讨厌后面的逗号语法,一个解决办法就是把 list传递给 tuple()函数:

x = tuple(['a'])

('a')不是元组,而只是一个字符串。

你需要在结尾多加一个逗号,让 python把它们当作 tuple:-

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>>

看到这个页面时,我很惊讶为什么没有人提到一个非常常见的用于单元素元组的方法。这可能是版本的东西,因为这是一个非常老的职位。不管怎么说:

>>> b = tuple(('a'))
>>> type(b)
<class 'tuple'>