0

我已经花了几个小时,仍然无法获得最佳结果。但是,这项任务很容易,但今天我似乎遗漏了一些东西或者只是变慢了。

所以,我们有一个简单的对象树结构。正式的对象如下所示:

node:
    name {str}
    value {str}
    children {list}
        node,
        node,
        ...

我需要创建以walk元组列表格式输出所有节点列表的函数:

for node in topNode.walk():
    path, object = node

wherepath显然是到当前节点的路径(即/name/name)。几乎相同的os.walk()功能。

目前我陷入了这段代码:

def walk(self):
    result = []
    for child in self.children:
        result.append(child)
        result.extend(child.walk())
    return result

这里怎么添加path

谢谢你的帮助!

4

2 回答 2

3

做任何你必须做的事情child以获得复合路径,然后child.name作为 walk 的参数传递(它甚至可以是关键字参数)。

就像是...

def walk(self, path=''):
    result = []
    for child in self.children:
        child_path = path + '/' + child.name
        result.append((child_path, child))
        result.extend(child.walk(child_path))
    return result
于 2012-05-13T17:26:27.963 回答
1

这可能行得通——我在脑海里把它煮熟了,还没有测试过……

 def walk(self,_root='/'):
     result=[]
     for child in self.children:
         path="%s%s/"%(_root,child.name) if child.children else "%s%s"%(_root,child.name)
         result.append((path,child))
         result.extend(child.walk(_root=path))

     return result  #result if _root != '/' else zip(*result)

编辑

修复了 return 语句以匹配您上面的编辑。

于 2012-05-13T17:26:18.497 回答