如何检查一个列表的元素是否是一个列表(在Python中)?
如果我们有以下列表:
list = ['UMM', 'Uma', ['Ulaster','Ulter']]
如果我需要找出列表中的某个元素本身是否是一个列表,我可以用下面的代码replaceaValidList中的什么?
for e in list: if e == aValidList: return True
有没有特别的用途? 有没有最好的方法来检查一个variables/元素是否是一个列表?
使用isinstance
:
if isinstance(e, list):
如果要检查对象是列表还是元组,请将几个类传递给isinstance
:
if isinstance(e, (list, tuple)):
-
弄清楚你想要的项目具有什么特定的属性。 他们需要可以索引吗? 可切片? 他们需要一个
.append()
方法吗? -
在
collections
模块中查找描述该特定types的抽象基类。 -
使用
isinstance
:isinstance(x, collections.MutableSequence)
你可能会问“为什么不使用type(x) == list
?” 你不应该这样做,因为那样你就不会支持看起来像列表的东西。 Python的一部分思路是鸭子打字 :
我看到一只像鸭子一样走路的鸟儿,像鸭子一样游泳,像鸭子一样呱呱叫,我把那只鸟叫做鸭子
换句话说,你不应该要求对象是list
,只是他们有你需要的方法。 collections
模块提供了一堆抽象基类,它们有点像Java接口。 任何types都是collections.Sequence
一个实例。例如,序列将支持索引。
你正在寻找的expression可能是:
... return any( isinstance(e, list) for e in my_list )
testing:
>>> my_list = [1,2] >>> any( isinstance(e, list) for e in my_list ) False >>> my_list = [1,2, [3,4,5]] >>> any( isinstance(e, list) for e in my_list ) True >>>