我有一个class属性,可以是字符串或字符串列表。我想将它转换为元组,使列表正常转换,但单个字符串成为单项元组:
[str, str] --> (str, str)
str --> (str, )
不幸的是tuple('sting')
会返回('s', 't', 'r', 'i', 'n', 'g')
,这不是我所期望的。没有类型检查可以做到吗?
答案 0 :(得分:3)
类型检查是实现这一目标的好方法。您如何判断输入是列表还是字符串?
你可以创建一个函数来测试输入是一个列表还是一个字符串,然后适当地返回并按你认为合适的方式处理其余部分。
的内容>>> def convert_to_tuple(elem):
if isinstance(elem, list):
return tuple(elem)
elif isinstance(elem, basestring):
return (elem,)
else:
# Do Something
pass
>>> convert_to_tuple('abc')
('abc',)
>>> convert_to_tuple(['abc', 'def'])
('abc', 'def')
你也只能检查字符串,(假设Python 2.x,在Py3中用basestring
替换str
>>> def convert_to_tuple(elem):
if isinstance(elem, basestring):
return (elem,)
else:
return tuple(elem)
>>> convert_to_tuple('abc')
('abc',)
>>> convert_to_tuple(('abc', 'def'))
('abc', 'def')
>>> convert_to_tuple(['abc', 'def'])
('abc', 'def')
也可以将功能转换为单行。
>>> def convert_to_tuple(elem):
return (elem,) if isinstance(elem, basestring) else tuple(elem)
答案 1 :(得分:2)
你可以这样做:
>>> s = 'str'
>>> print (s,)
('str',)
在处理字符串以实现您正在尝试的内容时,无需调用tuple()
。
如果您需要一种方法来帮助这两种类型,那么您无法避免类型检查:
def tuplising(typ):
return tuple(typ) if isinstance(typ, list) else (typ,)