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

时间:2012-10-13 19:21:19

标签: python

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

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

5 个答案:

答案 0 :(得分:88)

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

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

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

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

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

             ^       ^

来自Python Docs

  

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

如果您真的讨厌尾随逗号语法,则解决方法是将list传递给tuple()函数:

x = tuple(['a'])

答案 1 :(得分:17)

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

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

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:0)

有两种创建带有单个元素的元组的方法。
(i)第一个是,创建一个用逗号分隔的单个元素,然后它将是一个元组。

>>>t2 = ('a',)
>>>print(type(t2))
<class tuple>

(ii)第二个方法是,使用s个单个元素创建一个列表,然后将其转换为元组。然后将是元组。

>>>l1 = [1]
>>>t1 = tuple(l1)
>>>print(type(t1))
<class tuple>

答案 4 :(得分:0)

在整个页面上都显示出来,令我惊讶的是,为什么没有人提到一种使用一个元素的元组的非常常见的方法。可能是版本问题,因为这是一个很老的帖子。无论如何,这里是:

from scipy.stats import norm as gauss
def W_gauss(p, u, v, num_steps):
    ud = gauss(*gauss.fit(u))
    vd = gauss(*gauss.fit(v))
    z = np.linspace(0, 1, num_steps, endpoint=False) + 1/(2*num_steps)
    return np.mean(np.abs(ud.ppf(z) - vd.ppf(z))**p)**(1/p)