2012-01-18 57 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']