2017-06-16 84 views
0

我试图找到一个简单的方法来查看列表的子列表是否包含另一个子列表。如果它有一个我想要一个= 1,如果它有两层我想= 0。我试过至今:检查列表是否有一个或两个子列表

newElemLines = [[1, 42], [2, 42]] 

try: 
    newElemLines[0][0][0] 
    a = 1 
except ValueError: 
    a = 0 

newElemLines也可以像在下面的例子中,这将导致A = 1

newElemLines = [[[1, 42], [2, 42]], [[1, 42], [2, 42]]] 

不幸的是,这是行不通的。有人能帮我吗?
编辑:检查zeroeth元素就足够了。

+0

如果嵌套*规则*这是相对简单的。如果它是*任意的*则会使事情变得复杂一点。 –

+0

为了澄清,你保证'a'的每个元素已经是一个列表,并且如果这些列表中的任何*包含一个子列表作为*至少一个*元素,'a = 1'?例如''[[1,2],[3,[4,5]]]'会导致1? –

+0

另外,您发布的示例如何不起作用? (除了明显的语法错误,表明你没有测试它) –

回答

0

嗯,这是一个快速通用的解决方案,我煮熟了。这似乎工作,但我的感觉是,有一些我没有考虑过的边缘案例。但是这是开始。

In [10]: def how_deep(lst, level=0): 
    ...:  if isinstance(lst, list): 
    ...:   return max(how_deep(l, level+1) for l in lst) 
    ...:  return level - 1 
    ...: 

In [11]: how_deep([1,2]) 
Out[11]: 0 

In [12]: how_deep([[1, 42], [2, 42]]) 
Out[12]: 1 

In [13]: how_deep([[[[1],[2]],[3],[4],5],6,7,[8,[[[[[10]]]]]]]) 
Out[13]: 6 
相关问题