如何创建一个只有一个元素的“单例”元组

问题描述 投票:0回答:5

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

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>
python tuples
5个回答
229
投票

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

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

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

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

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

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

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

             ^       ^

来自 Python 文档

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

如果您真的讨厌尾随逗号语法,解决方法是将

list
传递给
tuple()
函数:

x = tuple(['a'])

26
投票

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

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

15
投票

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

您需要在末尾添加一个额外的逗号,以使

python
将它们视为
tuple
: -

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

-1
投票

=> 如果您需要将列表转换为具有一个 id 作为元素的元组。那么这个解决方案将对您有所帮助。

x_list = [1]

x_tuple = tuple(x_list)

=> 你会得到这个

(1,)

=> 所以现在将 0 附加到列表中,然后将其转换为元组

=> x_list.append(0)

=> x_tuple = tuple(x_list)

(1, 0)

-2
投票

看到这一页,我很惊讶为什么没有人提到一种用于具有一个元素的元组的非常常见的方法。可能这是版本问题,因为这是一篇非常旧的帖子。无论如何,这里是:

>>> b = tuple(('a'))
>>> type(b)
<class 'tuple'>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.