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

ris*_*raj 62 python

如果我们有以下列表:

list = ['UMM', 'Uma', ['Ulaster','Ulter']]
Run Code Online (Sandbox Code Playgroud)

如果我需要查明列表中的元素本身是否为列表,我可以用以下代码替换aValidList

for e in list:
    if e == aValidList:
        return True
Run Code Online (Sandbox Code Playgroud)

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

war*_*iuc 116

用途isinstance:

if isinstance(e, list):
Run Code Online (Sandbox Code Playgroud)

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

if isinstance(e, (list, tuple)):
Run Code Online (Sandbox Code Playgroud)


Kat*_*iel 22

  1. 找出list您想要物品的具体属性.他们需要是可索引的吗?可切片?他们需要一种.append()方法吗?

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

  3. 用途isinstance:

    isinstance(x, collections.MutableSequence)
    
    Run Code Online (Sandbox Code Playgroud)

你可能会问"为什么不用它type(x) == list?" 你不应该这样做,因为那样你就不会支持看起来像列表的东西了.Python的一部分心态是鸭子打字:

我看到一只鸟像鸭子一样散步,像鸭子一样游动,像鸭子一样呱呱叫,我把那只鸟称为鸭子

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

  • @ninjagecko是的,这是#2中的链接=) (2认同)

dan*_*era 9

您正在寻找的表达可能是:

...
return any( isinstance(e, list) for e in my_list )
Run Code Online (Sandbox Code Playgroud)

测试:

>>> 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
>>> 
Run Code Online (Sandbox Code Playgroud)

  • +1 使用 `any()` 而不是某些 for-loop-if 组合。 (2认同)