2017-06-16 1 views
0

Ich versuche einen einfachen Weg zu finden, ob eine Unterliste einer Liste eine andere Unterliste enthält oder nicht. Wenn sie eine hat möchte ich ein = 1, wenn es zwei Schichten hat möchte ich a = 0. Was ich bisher versucht:überprüfen, ob die Liste eine oder zwei Schichten von Unterlisten enthält

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

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

newElemLines auch wie im folgenden Beispiel aussehen könnte, was eine Folge sollte = 1

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

Leider funktioniert das nicht. Kann mir jemand helfen?
Edit: Es ist genug, um das Null-Element zu überprüfen.

+0

Wenn die Verschachtelung * regulär * ist, ist dies relativ einfach. Wenn es * willkürlich * ist, verkompliziert das die Dinge ein wenig. –

+0

Zur Klarstellung, Sie garantieren, dass jedes Element von 'a' bereits eine Liste ist, und wenn * irgendwelche * dieser Listen eine Unterliste als * mindestens ein * Element enthalten,' a = 1'? Zum Beispiel: "[[1, 2], [3, [4, 5]]]" ergibt eine 1? –

+0

Wie funktioniert das Beispiel, das Sie gepostet haben, nicht? (Über den offensichtlichen Syntaxfehler hinaus, der zeigt, dass Sie es nicht prüften) –

Antwort

0

Hm, hier ist eine schnelle allgemeine Lösung Ich habe gekocht. Es scheint zu funktionieren, aber mein Gefühl ist, dass es Randfälle gibt, die ich nicht berücksichtigt habe. Aber es ist Anfang.

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 
Verwandte Themen