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

Python 如何创建只有一个元素的元组,python,Python,在下面的示例中,我希望所有元素都是元组,为什么元组只包含一个字符串,却要转换为字符串 >>> a = [('a'), ('b'), ('c', 'd')] >>> a ['a', 'b', ('c', 'd')] >>> >>> for elem in a: ... print type(elem) ... <type 'str'> <type 'str'> <type 'tuple

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

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>
a = [('a'), ('b'), ('c', 'd')]
a=[('a'),('b'),('c','d')] >>>a ['a','b',('c','d')] >>> >>>对于a中的元素: ... 打印类型(elem) ...
前两个示例不是元组,而是字符串。单项元组需要一个尾随逗号,如:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
当元组只包含单个字符串时,为什么要将其转换为字符串

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>
a = [('a'), ('b'), ('c', 'd')]
因为前两个元素不是元组;它们只是线。括号不会自动使它们成为元组。必须在字符串后添加逗号,以向python指示它应该是元组

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

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

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

如果您真的讨厌后面的逗号语法,一种解决方法是将
列表
传递给
tuple()
函数:

x = tuple(['a'])
('a')
不是元组,而是字符串

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

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

当我看到这一页时,我很惊讶为什么没有人提到一个非常常见的方法来处理一个元素的tuple。可能这是版本的事情,因为这是一个非常古老的帖子。不管怎样,这是:

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

('a')
只计算出
'a'
Wow-3个正确答案,只需3分钟:)但是,请注意
的秘密:
a=1,2,3;打印一个
括号不能构成元组,逗号可以。@cdarke,除了空元组
()
,它只包含一对括号。True,或者更确切地说,
False
-几乎所有空元组都有好处(如果你明白我的意思的话)。这不是很优雅,看起来有点混乱。还有别的办法吗?那似乎不行。例如:元组(“abc”)(带或不带额外逗号)给出('a','b','c'),而(“abc',)给出('abc')。所以tuple()在这里似乎不是一个可行的选项。@Ben看一下
tuple
接受一个iterable,它是一个字符串(迭代字符)。如果您坚持不使用尾随逗号,请创建一个中间列表:
tuple(['abc'])
。当然,我只是说tuple函数并不否定使用逗号的必要性。@matanster语言语法在这方面没有改变。好吧,Python 2和Python 3的问题也是一样。奇怪的是,当其他答案不起作用时(将字符串值传递给方法,所以我使用的是变量而不是原始字符串;这可能就是为什么
(foo,)
对我不起作用的原因)如果输入字符串有几个字符,这将无法正常工作。例如,尝试使用
元组(('ab'))
,结果将是
('a','b')
,而不是
('ab',)
。在这种情况下,通常更可取的方法是提供一个列表,以避免后面出现逗号语法。e、 tuple(['ab'])此方法仅适用于长度为1的字符串,其他方法不适用。正确的语法是
tuple([var])