Beim Durchlaufen der Hierarchie in python?
Ich bin neu hier und Recht neu in python!
Bekamen wir eine Hausaufgabe, und ich war bereits in der Lage zu tun, rest, doch ein problem bleibt:
Wenn ich eine Hierarchie wie diese:
root = [
parent1 = [
child1,
child2 = [
sub_child
]
child3
],
parent2 = [
child1,
child2
]
]
Und Sie sind alle Instanzen einer Klasse mit dem Namen TreeHierarchyClass
, und Sie alle haben ein name-Attribut, wie kann ich eins finden, mit dem Namen I-Eingang?
Wollte ich mit for-Schleifen, aber es gibt keine Möglichkeit zu wissen, wie viele ich brauche? Immer der name ist einfach:
name = input("Enter name: ")
if name == TreeHierarchyObject.name:
print("Found it!")
aber wie mache ich eine Schleife durch die Objekte?
- Welche Art von Objekt ist
root
?list
?dict
? Ich kenne keine Python-syntax, die es erlaubt für subdeclarations wieroot = [ parent = [ ...
als die Sie derzeit in Ihrem Beispiel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden Sie die einfache Rekursion hier.
Die Methode richtet sich ein wenig auf, wie Sie Ihre Kind-Objekte angehängt werden, um das parent-Objekt.
Diese arbeitet, wenn Sie in einer Liste
self.children
, die ich empfehlen würde zu tun.Nur definieren Sie die folgende Methode in Ihrer Klasse:
Edit:
Um diese Arbeit zu machen, die für jedes Attribut, das nicht nur Namen, verwenden Sie
getattr()
statt:Und rufen Sie einfach
root.findObjectByName("Sub Child!")
oder verwenden Sie die zweite Methode:root.findObject("name", "Sub Child!")
child
stattchildren
aber ich denke, dass Kinder besser ist, verändert es!Können Sie
recursion
oder verwenden Sieiteration
. So oder so spielt keine Rolle. Aber Sie brauchen eine Strategie, um die Suche in der Baumstruktur.Hier sind einige strategry gehen durch einen Graphen:
Die Idee dabei ist, nicht über die gleichen Knoten /Blatt zweimal, das ist trivial für Bäume, aber das verlangen
coloring
für Graphen:Gibt es ein paar design-Muster, die Sie verwenden können, z.B. die
visitor
Muster, und fügen Sie eine Methode hinzu.visit()
zu IhremTreeHierarchyClass
zu besuchen, dessen sub-Knoten und anderen Knoten nach Namen suchen.Beispiel:
kann man alle Knoten mit:
erstellen wir eine Beispiel-Baumstruktur:
nun finden wir einige Gegenstände:
in diesem Beispiel drucken: