如何查看列表是否包含Python中的另一个列表?

时间:2017-02-13 01:05:13

标签: python python-3.x

如何检查列表是否包含其他列表? 我需要它以便

[['cow'], 12, 3, [[4]]]

会输出True,而类似

['cow', 12, 3, 4]

会输出False

3 个答案:

答案 0 :(得分:3)

如果您还想查找列表的子类,则应使用isinstance

def any_list_in(obj):
    return any(isinstance(item, list) for item in obj)
条件为True后,

any会立即停止,因此只需要根据需要检查任意数量的项目。

>>> any_list_in([['cow'], 12, 3, [[4]]])
True

>>> any_list_in(['cow', 12, 3, 4])
False

isinstance(item, list) for item in objgenerator expression,其作用类似于for - 循环或列表理解。它也可以写成(更长,稍慢但可能更好理解):

def any_list_in(obj):
    for item in obj:
        if isinstance(item, list):
            return True
    return False

答案 1 :(得分:0)

这是一个使用列表理解的简洁解决方案。

鉴于obj = [['cow'], 12, 3, [[4]]],我们将首先使用列表推导来获取obj中的类型列表:

>>> [type(x) for x in obj]
[<type 'list'>, <type 'int'>, <type 'int'>, <type 'list'>]

现在,我们只需检查list是否在我们创建的类型列表中。让我们重新审视列表理解并将其转换为布尔表达式:

>>> list in [type(x) for x in obj]

那里,这很好,也很短。它有用吗?

>>> obj = [['cow'], 12, 3, [[4]]]
>>> list in [type(x) for x in obj]
True
>>> obj = ['cow', 12, 3, 4]
>>> list in [type(x) for x in obj]
False

答案 2 :(得分:0)

如果您的列表中不包含某些带有&#39; [&#39;在它。

def check(a):
   a=str(a)
   if a.count('[')==1:  # or a.count(']')==1;
      return False
   return True

在python 2.7中,我们有一个用于此工作的模块:(我不知道python 3.x中的任何此类模块)

from compiler.ast import flatten    
def check(a):
    if flatten(a)==a:
        return False
    return True