从字符串python创建单项元组

时间:2014-12-13 00:13:37

标签: python list tuples

我有几个对象:一些字符串和一些元组。对于每个不是字符串的项目,我想将它变成一个单对象元组。例如:

s = 'spam' #turns into:
t = ('spam')

然后,我想将这些元组中的每一个附加到列表中。代码:

mylist = []
items = ('spam', 'eggs', ('shrubbery', 1, 'toast'), ('foo', 'bar'))
#If not already a tuple, each item is converted into a tuple, then appended to `mylist`
#In the end, `list` should be:
mylist = [('spam'), ('eggs'), ('shrubbery', 1, 'toast'), ('foo', 'bar')]

我已经尝试过了:

for i in items:
    if type(i) != tuple:
        i = tuple(i)
    mylist.append(i)

这会将每个独立的字符串变成一个字符元组,这不是我想要的。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

单项元组由逗号定义,而不是括号:

>>> 1,
(1,)
>>> (1)
1

当逗号表示其他内容时,括号仅用于描述元组。

请参阅表达式文档中的Parenthesized Forms

  

带括号的表达式列表产生表达式列表产生的任何内容:如果列表包含至少一个逗号,则产生一个元组;否则,它会产生构成表达式列表的单个表达式。

所以使用:

if not isinstance(i, tuple):
    i = i,

注意使用isinstance()来测试类型。

答案 1 :(得分:3)

您可以使用列表解析来执行此操作:

>>> items = ('spam', 'eggs', ('shrubbery', 1, 'toast'), ('foo', 'bar'))
>>>
>>> [item if isinstance(item, tuple) else (item,) for item in items]
[('spam',), ('eggs',), ('shrubbery', 1, 'toast'), ('foo', 'bar')]