我有一个列表,有时它是嵌套的,有时它不是。根据它是否嵌套,延续是不同的。如何检查此列表是否嵌套? 1}}或True
应该输出。
示例:
False
- > [1,2,3]
False
- > [[1],[2],[3]]
答案 0 :(得分:32)
您可以使用isinstance
和generator 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