Pat*_*oki 2 python tree recursion
我是新来的,对 python 还很陌生!
我们有一份作业,我已经能够完成其余部分,但仍然存在一个问题:如果我有一个像这样的树层次结构:
root = [
parent1 = [
child1,
child2 = [
sub_child
]
child3
],
parent2 = [
child1,
child2
]
]
Run Code Online (Sandbox Code Playgroud)
它们都是一个名为 的类的实例TreeHierarchyClass,并且它们都有一个 name 属性,我如何找到具有我输入的名称的类?
我尝试使用 for 循环,但无法知道我需要多少个?获取名字很简单:
name = input("Enter name: ")
if name == TreeHierarchyObject.name:
print("Found it!")
Run Code Online (Sandbox Code Playgroud)
但如何循环访问对象呢?
小智 5
您应该在这里使用简单的递归。该方法在一定程度上取决于子对象如何附加到父对象。
如果它们在列表中self.children,则此方法有效,我建议这样做。只需在类中定义以下方法:
def findObjectByName(self, name):
if self.name == name:
return self
else:
for child in self.children:
match = child.findObjectByName(name)
if match:
return match
Run Code Online (Sandbox Code Playgroud)
编辑:
要使其适用于任何属性,而不仅仅是名称,请改用getattr():
def findObject(self, attr, value):
if getattr(self, attr) == value:
return self
else:
for child in self.children:
match = child.findObject(attr, value)
if match:
return match
Run Code Online (Sandbox Code Playgroud)
只需调用root.findObjectByName("Sub Child!")or 即可使用第二种方法:root.findObject("name", "Sub Child!")