Python检查列表是否嵌套

时间:2014-06-12 09:26:36

标签: python list

我有一个列表,有时它是嵌套的,有时它不是。根据它是否嵌套,延续是不同的。如何检查此列表是否嵌套? True应该输出。

示例:

False - > [1,2,3]

False - > [[1],[2],[3]]

2 个答案:

答案 0 :(得分:32)

您可以使用isinstancegenerator expression结合any。这将检查原始外部列表中list对象的实例。

In [11]: a = [1, 2, 3]

In [12]: b = [[1], [2], [3]]

In [13]: any(isinstance(i, list) for i in a)
Out[13]: False

In [14]: any(isinstance(i, list) for i in b)
Out[14]: True

请注意any一旦到达有效的元素(在这种情况下,如果元素是列表),它将返回True,因此您不会最终迭代整个外部不必要地列出。

答案 1 :(得分:0)

我们想检查outer-list里面的元素是否是list的一个实例,就像@Ffisegydd说的,我们可以使用生成器表达式来构建一个生成器并使用next()对其进行迭代,如果里面有任何元素外循环是 list 的一个实例,然后在生成器上调用 next() 将起作用,否则如果外循环内的元素都不属于 list 的实例,则调用 next 将引发 StopIteration

最佳情况:如果是嵌套循环(我们可以在看到列表的第一个实例后立即停止迭代)

最坏情况:如果不是嵌套循环(我们需要遍历outerlist内的所有元素)

def is_nested_list(l):
    
    try:
          next(x for x in l if isinstance(x,list))
    
    except StopIteration:
        return False
    
    return True