149

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

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

4 回答 4

191

为什么元组只包含一个字符串时转换为字符串?

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

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

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

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

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

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

             ^       ^

来自Python 文档

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

如果你真的讨厌尾随的逗号语法,解决方法是将 a 传递listtuple()函数:

x = tuple(['a'])
于 2012-10-13T19:24:00.977 回答
24

您的前两个示例不是元组,它们是字符串。单项元组需要一个尾随逗号,如:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
于 2012-10-13T19:23:50.857 回答
13

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

您需要在末尾添加一个额外的逗号以python将它们视为tuple:-

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 
于 2012-10-13T19:24:07.097 回答
-3

来到这个页面,我很惊讶为什么没有人提到一个非常常见的元组方法之一。可能这是版本的事情,因为这是一个非常古老的帖子。无论如何,它是:

>>> b = tuple(('a'))
>>> type(b)
<class 'tuple'>
于 2020-12-07T03:00:46.733 回答