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

时间:2012-03-18 16:22:48

标签: python

如果我们有以下列表:

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

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

for e in list:
    if e == aValidList:
        return True

是否有特殊的导入使用?有没有最好的方法来检查变量/元素是否是列表?

5 个答案:

答案 0 :(得分:112)

使用isinstance

if isinstance(e, list):

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

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

答案 1 :(得分:21)

  1. 确定您希望项目具有的list的具体属性。他们需要是可索引的吗?可切片?他们需要.append()方法吗?

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

  3. 使用isinstance

    isinstance(x, collections.MutableSequence)
    

  4. 您可能会问“为什么不使用type(x) == list?”你不应该这样做,因为那样你就不会支持看起来像列表的东西了。 Python心态的一部分是duck typing

      

    我看到一只鸟像鸭子一样走路,像鸭子一样游泳,像鸭子一样呱呱叫,我称这只鸟为鸭子

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

答案 2 :(得分:8)

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

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

测试:

>>> 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
>>> 

答案 3 :(得分:3)

可能更直观的方式是这样

 this.serviceUtil.getEndereco(cep)
        .pipe((response: Endereco) => {
         let endereco = response;
         return endereco;
         })

答案 4 :(得分:0)

您可以简单地写:

for item,i in zip(your_list, range(len(your_list)):

    if type(item) == list:
        print(f"{item} at index {i} is a list")