2012-11-13 49 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