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

Rus*_*ell 88 python

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

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

Jon*_*art 109

因为前两个元素不是元组; 他们只是字符串.括号不会自动使它们成为元组.你必须在字符串后面添加一个逗号来向python表明它应该是一个元组.

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

>>> type( ('a',) )
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

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

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

             ^       ^
Run Code Online (Sandbox Code Playgroud)

来自Python文档:

一个特殊的问题是构造包含0或1项的元组:语法有一些额外的怪癖来适应这些.空元组由一对空括号构成; 通过使用逗号跟随值来构造具有一个项目的元组(仅在括号中包含单个值是不够的).丑陋但有效.

  • 虽然这不是很优雅,看起来有点令人困惑.还有其他方法吗? (5认同)
  • 这似乎不起作用.例如:元组("abc")(带或不带额外的逗号)给出('a','b','c'),而("abc",)给出('abc').所以tuple()似乎不是一个可行的选择. (3认同)
  • @Ben看一下[docs](https://docs.python.org/2/library/functions.html#tuple).`tuple`接受一个*iterable*,一个字符串是(迭代字符).如果你坚持不使用尾随逗号,那么制作一个中间列表:`tuple(['abc'])`. (3认同)

Fré*_*idi 18

你的前两个例子不是元组,它们是字符串.单项元组需要尾随逗号,如下所示:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 9

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

您需要在最后添加一个额外的逗号,以便python将它们视为tuple: -

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 
Run Code Online (Sandbox Code Playgroud)