我有几个对象:一些字符串和一些元组。对于每个不是字符串的项目,我想将它变成一个单对象元组。例如:
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)
这会将每个独立的字符串变成一个字符元组,这不是我想要的。
我该怎么做?
答案 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')]