我需要在Python中創建一個樹狀結構。我有一個函數get(parentId),它返回一個包含該父對象的對象列表 - 我認爲這應該遞歸地完成。構建一棵樹「向後」
結果應該是這樣的:["root object", ["child1 of root", "child2 of root", ["child2-1", "child2-2"]]]
每個對象都有一個屬性的父親,這是是對的parentId的get(),但作爲一個起點,我只有根對象。
我需要在Python中創建一個樹狀結構。我有一個函數get(parentId),它返回一個包含該父對象的對象列表 - 我認爲這應該遞歸地完成。構建一棵樹「向後」
結果應該是這樣的:["root object", ["child1 of root", "child2 of root", ["child2-1", "child2-2"]]]
每個對象都有一個屬性的父親,這是是對的parentId的get(),但作爲一個起點,我只有根對象。
假設你仍然對樹的列表表示感興趣(這不一定是無用的事情),這是一個遞歸函數定義,我相信你需要它(假設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
工程就像一個魅力:) – dom0 2012-04-15 11:28:31
有一個樹的標準數據結構,它不是列表的列表。
創建一個類Node
,該屬性的children
包含list
(或,如果您不關心順序)子節點的屬性。還要製作一個方法add_child
,它需要一個節點,設置該節點的parent
,並將其添加到children
列表中。喜歡的東西:
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樹庫中的一個來獲取實際的數據結構。試試xml.dom.minidom
或lxml
。
我不能使用「其他」結構,因爲數據源(get())和目標(列表的列表)。 ..)定義:( – dom0 2012-04-15 11:29:32
啊,夠公平的,我誤解了這個問題。 – katrielalex 2012-04-15 11:41:10
和你的問題是什麼? – 2012-04-15 11:08:22
如何做到這一點。我很困難,但我需要儘快完成...;) – dom0 2012-04-15 11:10:03