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 に答える