2012-11-13 92 views
1

的簡單方式列表轉換到Python中的元組是這樣的:轉換列表來元組也將名單列表內

tuple1=tuple(list1) 

但是,如果列表1中包含一個或多個列表,他們保持不變。有什麼方法可以將它們轉換? 例如

list1=[1,3,'abc',[3,4,5]] 

去:

tuple1=(1,3,'abc',(3,4,5)) 

回答

7

遞歸是所有你需要在這裏:

def convert(l): 
    return tuple(convert(x) for x in l) if type(l) is list else l 
>>> convert([1,3,'abc',[3,4,5]]) 
(1, 3, 'abc', (3, 4, 5)) 
>>> convert([[[[[[]]]]]]) 
((((((),),),),),) 
>>> convert(42) 
42 
+0

優秀使用遞歸。它適用於任何級別的嵌套(低於遞歸限制 - 並非真正的問題)。 –

+2

我認爲'isinstance(l,list)'是首選。 – mgilson

+1

@mgilson:不確定。編輯。我認爲在這種情況下,你可能不想將列表派生類轉換爲元組。 – Eric

1

使用isinstance()看到如果一個元素是一個列表或者不:

In [64]: lis=[1,3,'abc',[3,4,5]] 

In [66]: tuple(tuple(x) if isinstance(x,list) else x for x in lis) 
Out[66]: (1, 3, 'abc', (3, 4, 5)) 
+0

'list'是否有內建的超類? – Eric

+0

不,它不需要,但'type()'可能不適用於'list'的子類。 –

+0

子類是我正在尋找的詞... – Eric