如何检查一个列表的元素是否是一个列表(在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)): 
  1. 弄清楚你想要的项目具有什么特定的属性。 他们需要可以索引吗? 可切片? 他们需要一个.append()方法吗?

  2. collections模块中查找描述该特定types的抽象基类。

  3. 使用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 >>>