【发布时间】:2012-11-02 06:25:31
【问题描述】:
在 Python 中将列表转换为元组的一种简单方法是:
tuple1=tuple(list1)
但如果 list1 包含一个或多个列表,它们保持不变。有没有办法我们也可以转换它们? 例如
list1=[1,3,'abc',[3,4,5]]
前往:
tuple1=(1,3,'abc',(3,4,5))
【问题讨论】:
标签: python list type-conversion tuples
在 Python 中将列表转换为元组的一种简单方法是:
tuple1=tuple(list1)
但如果 list1 包含一个或多个列表,它们保持不变。有没有办法我们也可以转换它们? 例如
list1=[1,3,'abc',[3,4,5]]
前往:
tuple1=(1,3,'abc',(3,4,5))
【问题讨论】:
标签: python list type-conversion tuples
这里只需要递归:
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
【讨论】:
isinstance(l,list) 是首选。
type(x) is list 更清楚地表明您正在处理列表和列表。
is 表示它们是同一个对象。 == 只是意味着它们在某种意义上是等价的(由__eq__ 定义)。在这种情况下,is 和 == 做同样的事情,前者更明确(在我看来)。
使用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))
【讨论】:
list 有内置超类吗?
type() 可能不适用于list 的子类。
abc.types.ListType。子类,我不知道。