2014-12-04 75 views
0

我想創建一個列表中的每個項目的「路徑」。例如輸入列表:創建「數據樹」路徑遞歸迭代Python中的嵌套列表

_list = [[x,x,x], [[x,x,x],[x,x,x]], [x,x,x]] 

期望的輸出:

_list = [\ 
     [[0,0,0],[0,0,0],[0,0,0]], \ 
     [[[0,1,0],[0,1,0],[0,1,0]],[[0,1,1],[0,1,1],[0,1,1]]] \ 
     [[0,2,0], [0,2,0], [0,2,0]]] 

的想法是,我建立到一個類似的數據樹中的路徑:

http://studiomaven.org/images/2/2c/Grasshopper_Data_Tree.png

其中第一那麼由於_list在其中有三個(3)列表,所以第一個二級分支是[0,0] [0,1]和[0,2],那麼因爲[0,1]分支還有一個列表在它又是另一個在第一個分支中的所有項都是[0,0,0],第二個分別是[0,1,0]和[0,1,1]的情況下,因爲該分支中有兩個列表,並且最終分支是[0,2,0]。

實施例2:輸入:

_list = [x,x,x,x] 

輸出:

_list = [[0],[0],[0],[0]] 

說明: 自單個深度列表中的所有的信息駐留在第一[0]的分支。每個項目x的路徑[0]

實施例3: 輸入:

_list = [[x,x,x],[x,x,x]] 

輸出:

_list = [[[0,0],[0,0],[0,0]],[[0,1],[0,1],[0,1]]] 

說明: _List包含兩個列表,以便第一支路0具有兩個更多的分支在上面。在這種情況下,該級別的兩個分支上的所有項目都是[0,0],第二個分支上的是[0,1]。

這可以以某種方式遞歸地完成,這種方式可以處理列表列表的任何深度/複雜度?

我明白,這不是一個錯誤/問題,但我有點noob和遞歸函數仍然是一個謎。任何幫助都感激不盡。即使是簡單的僞代碼讓我開始。 謝謝,

+2

我懷疑沒有人仍然能夠理解你的問題描述。如果你仍然需要一個答案,你可以請嘗試更清楚或發佈鏈接到源? – gboffi 2014-12-04 15:09:59

+0

我不確定什麼是適當的術語,但它像「索引嵌套列表」,而不是隻記錄項目的深度,它會爲每個列表/子列表創建一個包含數字的列表。我會舉另一個例子。此外,圖像鏈接是數據樹路徑的一個很好的描述。 – konrad 2014-12-04 15:16:48

+0

您的鏈接中的「蚱蜢」是否參考了_「Grasshopper 犀牛算法模型」_?如果我是正確的,是否有可能爲你的標籤添加標籤'rhino'可以真正幫助你? – gboffi 2014-12-04 15:45:39

回答

0

您可以嘗試爲一般樹創建一個類,並將各分支作爲根對象的子項。假設根對象可以是0值,那麼最左邊的子元素的值是[0,0],值爲[0,1]的下一個子元素等等。如果孩子是一個嵌套列表,那麼你可以創建一個方法來讓更多的孩子離開它,並將它們作爲父代添加到初始節點。 您可以初始化類爲這樣的事情,並可以相應地工作,

class GrassTree(): 

    def __init__(self, lst): 
     self.key = "0" 
     self.child = [] 
     for i in lst: 
      self.child.append(i) 

    def getChild(self): 
     for i in range(0, len(self.child)): 
      print(self.child[i]) 

這只是一個骨骼的事情,我已經開始爲了解決這個問題,一起工作的想法。將進一步工作。就遞歸而言,當試圖實現插入子類的類時,它會出現。

PS:可能只是給出了一個評論,但沒有足夠的聲望來這樣做,因此這樣一個幼稚的答案。對不起。

+0

感謝您關注此事。我不知道從哪裏開始,所以這很棒。我會看看,看看我能不能拿出一些東西...... – konrad 2014-12-04 17:49:42