2012-01-18 53 views
0

我有一個平坦的列表,例如:如何從Python中的扁平列表構建一個嵌套列表?

flat = ['1', '1-1', '1-1-1', '1-2', '2', '2-1', '2-2', '3'] 

,我需要轉換成一個嵌套列表,其中每個級別(破折號後面的數字)開始一個新的子表,例如:

result = ['1', ['1-1', ['1-1-1'], '1-2'], '2', ['2-1', '2-2'], '3'] 

任何提示如何在Python中做到這一點?

+3

你有沒有谷歌 「深度優先搜索」 了嗎? SOPA抗議活動很難做到。但是您應該仔細閱讀關於深度優先搜索的內容。也。如果這是家庭作業,請正確標記 – 2012-01-18 19:40:48

+0

我會在Depth-First Search和itertools上閱讀。謝謝。 – user1156980 2012-01-18 20:18:08

回答

4
def nested(flat, level=0): 
    for k, it in itertools.groupby(flat, lambda x: x.split("-")[level]): 
     yield next(it) 
     remainder = list(nested(it, level + 1)) 
     if remainder: 
      yield remainder 

例子:

>>> list(nested(flat, 0)) 
['1', ['1-1', ['1-1-1'], '1-2'], '2', ['2-1', '2-2'], '3']