2013-09-01 47 views
1

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

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

str --> (str,)

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

+0

您要求根据值的类型进行操作。根据定义,这需要某种形式的类型检查。 – Eric

回答

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') 

线的东西你可以只检查字符串也

>>> 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') 

(假设的Python 2.x中,与PY 3 str更换basestring)的功能转换为一个衬垫有可能太。

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

他们要求没有类型检查所以一个方法我假设他们已经知道如何做到这一点? – Shashank

+0

AFAIK类型检查将是实现这一目标的最佳途径。 :) –

+0

谢谢。我只是想知道是否有另一种方式,因为类型检查被正确地认为是不合格的。 – Sventimir

2

你可以这样做:

>>> s = 'str' 
>>> print (s,) 
('str',) 

没有必要用绳子处理来实现你想要什么的时候打电话给tuple()

如果你需要一个方法来帮助这两种类型,那么你就无法避免类型检查:

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

是的,但在套用命题名单将返回'([ 'ABC', 'CDE'])'我需要'( 'ABC', 'CDE')。 – Sventimir

相关问题