2013-09-01 81 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

相關問題