Python verschachtelte Liste Rekursion-Suche
Gegeben, wird eine verschachtelte Liste L (so, dass jedes element von L ist entweder eine ganze Zahl oder eine Liste, die kann sich
enthalten ganze zahlen oder Listen, die wiederum.... etc) return True i s ist in L.
search([1, [2, 3], 4, [5, [6 , [], [8, 9]], 10]], 8)
sollte True zurückgeben.
Hier ist was ich habe, so weit:
def search (L,s):
"""(list, anytype) _> Bool
Returns true iff s is present in L
"""
if L:
if L[0] == s:
return True
else:
return search (L[1:], s)
else:
return False
Dieser aktuellen code funktioniert für eine Liste, wenn es nicht verschachtelt, oder wenn es verschachtelt ist wie so (das geschachtelte element ist das Letzte element):
[1, 2, 3, [4, 5]]
Aber nicht für die folgenden:
[1, 2, [3, 4], 5]
Wie kann ich meinen code so, dass er arbeitet für eine verschachtelte Liste? mit der geschachtelten element irgendwo in der Liste nicht unbedingt das Letzte element?
Jede Hilfe dankbar!
EDIT: Sorry, habe vergessen anzugeben, dass es muss rekursiv sein.
- mögliche Duplikate von Wie kann ich die Tiefe Suche eine Python-Liste?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pressen Sie Ihren gesamten code wie folgt
Können Sie es testen, wie diese
Ausgabe
Die Logik ist so,
Wenn die
current_item
ist gleich der Zahl, die wir suchen, zurückTrue
.Wenn die
current_item
ist nicht eine Instanz der Liste, dann ist es eine Zahl in diesem Fall. Wenn es eine Zahl ist, und es nicht gleichnumber
wir sollten wieder zurückFalse
.Wenn die
current_item
ist eine Liste, dann gehen durch jede und jedes element und prüfen, ob jedes der Elemente hatnumber
.any
kehrt sofort nach dem aufstehen die ersteTrue
Wert.search
auf die Letzte Zeile.isinstance
undany
aber ich bin mir nicht genau sicher, was Sie tun, wenn stellen zusammen wie, dassWenn es egal ist, wo das Element in der Liste so etwas wie dies funktionieren sollte
itertools flatten
Rezept nicht so etwas haben. Ihr Algorithmus könnte besser sein als ein generator, da die Liste entpackt werden konnte, sehr groß.