1

Pythonでツリーのような構造を作成する必要があります。その親を持つオブジェクトのリストを返す関数get(parentId)があります-これは再帰的に実行する必要があると思います。

結果は次のようになります。["root object", ["child1 of root", "child2 of root", ["child2-1", "child2-2"]]]

すべてのオブジェクトには、get()のparentIdである属性parentがありますが、開始点として、ルートオブジェクトしかありません。

4

2 に答える 2

1

ツリーには標準のデータ構造があり、リストのリストではありません。

「子」ノードの(または、順序を気にしない場合は)を含むNode属性を持つクラスを作成します。また、ノードを取得し、そのノードを設定してリストに追加するメソッドを作成します。何かのようなもの:childrenlistsetadd_childparentchildren

class Node(object):
    def __init__(self, children={}):
        self.parent = None
        self.children = children

    def add_child(self, child):
        child.parent = self
        self.children.add(child)

ツリーを歩くには、ルートの子、次にその子などを要求します。これは再帰的に実行できますが、速度とメモリ効率のために、Pythonで繰り返し実行することをお勧めします。

def walk(root):
    yield root
    for child in root.children:
        for elt in walk(child):
            yield elt

もちろん、これは以前にも何度も行われているので、宿題や学習演習でない限り、自分で書くべきではありません。

HTML / XMLドキュメントはツリーのように構造化されているため、実際のデータ構造には、おそらく多くのDOMツリーライブラリの1つを使用する必要があります。xml.dom.minidomまたはを試してくださいlxml

于 2012-04-15T11:21:47.897 に答える
1

ツリーのリスト表現にまだ関心があると仮定すると(これは必ずしも役に立たないことではありません)、これは再帰関数の定義であり、必要なことを実行すると私は信じています(get()関数が実際に以前に定義されている場合)。

def build_tree(node):
    return [node,[build_tree(child) for child in get(node)]]

これと同様の方法で使用できます。

root = 1  # or whatever other representation you may use for root
list = build_tree(root)
print list
于 2012-04-15T11:23:31.770 に答える