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

Python 列表字符串或元组的字符串,python,string,iterable,Python,String,Iterable,我有一个class属性,它可以是字符串或字符串列表。我想将其转换为元组,以便列表正常转换,但单个字符串将成为单个项元组: [str,str]-->(str,str) str-->(str,) 不幸的是tuple('sting')返回('s','t','r','i','n','g'),这不是我所期望的。是否可以在不进行类型检查的情况下执行此操作?您可以执行以下操作: >>> s = 'str' >>> print (s,) ('str',) 在处理字符串时,不

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

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

str-->(str,)

不幸的是
tuple('sting')
返回
('s','t','r','i','n','g')
,这不是我所期望的。是否可以在不进行类型检查的情况下执行此操作?

您可以执行以下操作:

>>> s = 'str'
>>> print (s,)
('str',)
在处理字符串时,不需要调用来实现您正在尝试的内容

如果需要一种方法来帮助这两种类型,则无法避免类型检查:

def tuplising(typ):
    return tuple(typ) if isinstance(typ, list) else (typ,)
您可以这样做:

>>> s = 'str'
>>> print (s,)
('str',)
在处理字符串时,不需要调用来实现您正在尝试的内容

如果需要一种方法来帮助这两种类型,则无法避免类型检查:

def tuplising(typ):
    return tuple(typ) if isinstance(typ, list) else (typ,)

类型检查将是实现这一点的一个很好的方法。否则,您将如何确定输入是列表还是字符串

您可以创建一个函数,用于测试输入是列表还是字符串,并适当返回,然后根据需要处理其余部分。类似于

>>> 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')
您也只能检查字符串(假设Python2.x,将Py3中的
basestring
替换为
str

也可以将函数转换为一行

>>> def convert_to_tuple(elem):
        return (elem,) if isinstance(elem, basestring) else tuple(elem)

类型检查将是实现这一点的一个很好的方法。否则,您将如何确定输入是列表还是字符串

您可以创建一个函数,用于测试输入是列表还是字符串,并适当返回,然后根据需要处理其余部分。类似于

>>> 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')
您也只能检查字符串(假设Python2.x,将Py3中的
basestring
替换为
str

也可以将函数转换为一行

>>> def convert_to_tuple(elem):
        return (elem,) if isinstance(elem, basestring) else tuple(elem)

他们要求一种没有类型检查的方法,所以我假设他们已经知道如何做到这一点?AFAIK类型检查将是实现这一点的最佳方法。:)非常感谢。我只是想知道是否还有另一种方法,因为类型检查(正确地)被认为是不合法的。他们要求一种没有类型检查的方法,所以我假设他们已经知道如何做到这一点?AFAIK类型检查将是实现这一点的最佳方法。:)非常感谢。我只是想知道是否还有其他方法,因为类型检查(正确地)被认为是不合法的。您要求根据值的类型做一些事情。根据定义,这需要某种形式的类型检查。您要求根据值的类型执行某些操作。根据定义,这需要某种形式的类型检查。是的,但将命题应用于列表将返回
(['abc',cde',)
我需要的地方('abc',cde')。是的,但将命题应用于列表将返回
(['abc',cde',)
我需要的地方('abc',cde')。