列表的字符串或元组的字符串

时间:2013-09-01 08:03:50

标签: python string iterable

我有一个class属性,可以是字符串或字符串列表。我想将它转换为元组,使列表正常转换,但单个字符串成为单项元组:

[str, str] --> (str, str)

str --> (str, )

不幸的是tuple('sting')会返回('s', 't', 'r', 'i', 'n', 'g'),这不是我所期望的。没有类型检查可以做到吗?

2 个答案:

答案 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,)