2017-07-31 70 views
-2

我有一個python 父指針樹列表其中列表的索引指示的節點索引和corrispondent值在列表中的父索引:排序父樹列表在前面葉

  #1 2 3 4 5 6 7 8 9 10 11 12 13 14 
parents = [2, 3, 13, 5, 12, 7, 11, 9, 10, 11, 12, 13, 14, 0] 

我也有另外一個列表,表示wheter父母的元素是葉:

   #1  2  3  4  5  6  7  8  9  10 11  12  13  14 
leaves_idx = [True, False, False, True, False, True, False, True, False, False, False, False, False, False] 

現在我想重新映射家長名單以這樣的方式前4元素是樹葉和STR樹的保留是:

remapped_parents = [6, 5, 7, 9, 12, 8, 11, 13, 10, 11, 12, 13, 14, 0] 


       #1  2  3  4  5  6  7  8  9  10 11  12  13  14 
leaves_idx = [True, True, True, True, False, False, False, False, False, False, False, False, False, False] 

有沒有辦法做到這一點?

+0

請用你的語言更清楚。你想要的輸出是什麼? –

+0

所以你只是想通過索引對父母進行排序並限制它,以便前四個元素爲真?你如何對待其他元素,他們留在原地或移動,更明確 –

+0

@RajanChauhan我發佈我想要的輸出。必須移動其他元素才能維護樹結構。我想這樣做是因爲這個[link](https://github.com/stanfordnlp/treelstm/blob/master/util/read_data.lua)處的** treelstm.read_tree **函數以此命令作爲輸入父列表時尚 – sdrabb

回答

0

所以基本上你想過濾掉前面的葉子和末尾的非葉子節點。

parents = [2, 3, 13, 5, 12, 7, 11, 9, 10, 11, 12, 13, 14, 0] 
leaves_idx = [True, False, False, True, False, True, False, True, False, False, False, False, False, False] 
leaves = [] 
non_leaves = [] 
for i,j in enumerate (leaves_idx): 
    if j==True: 
     leaves.append(parents [i]) #leaves nodes at front 
    else: 
     non_leaves.append(parents [i]) #non leaves at last 
final_list = leaves + non_leaves 

這裏將葉子和非葉子分解爲兩個列表並在之後進行整理。

+0

謝謝,但我想mantain樹的結構 – sdrabb

+0

@sdrabb檢查出來 –

+0

我檢查它的輸出是** [2,5,7,9,3,13,12,11,10,11,12, 13,14,0] ** – sdrabb