2017-06-16 196 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 
相關問題