如何检查列表的元素是否是列表(在Python中)?

How to check if an element of a list is a list (in Python)?

如果我们有以下列表:

1
list = ['UMM', 'Uma', ['Ulaster','Ulter']]

如果我需要知道列表中的元素本身是否是列表,我可以用什么替换下面代码中的avalidlist?

1
2
3
for e in list:
    if e == aValidList:
        return True

有特殊的进口货要用吗?有没有检查变量/元素是否为列表的最佳方法?


使用isinstance

1
if isinstance(e, list):

如果要检查对象是列表或元组,请将几个类传递给isinstance

1
if isinstance(e, (list, tuple)):


  • 计算出您希望这些项目具有的list的特定属性。它们需要可索引吗?是否灵活?他们需要一个.append()方法吗?

  • 查找描述collections模块中特定类型的抽象基类。

  • 使用isinstance

    1
    isinstance(x, collections.MutableSequence)
  • 你可能会问"为什么不直接使用type(x) == list"?你不应该这样做,因为那样你就不支持像列表一样的东西。Python的一部分心态是鸭子打字:

    I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck

    换句话说,您不应该要求对象是lists,只要它们有您需要的方法。EDCOX1 4模块提供了一组抽象基类,它们有点像Java接口。例如,作为collections.Sequence实例的任何类型都将支持索引。


    您要查找的表达式可能是:

    1
    2
    ...
    return any( isinstance(e, list) for e in my_list )

    测试:

    1
    2
    3
    4
    5
    6
    7
    >>> 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
    >>>


    也许,更直观的方法是这样的

    1
    2
    if type(e) is list:
        print('Found a list element inside the list')