2012-01-18 11 views
0

Iは、例えば、フラットなリストを持っている:私は、例えば、各レベル(ダッシュ番号が続く)新たなサブリストを開始し、ネストされたリストに変換する必要が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

はまだあなたのGoogleの "深さ優先探索" をしましたか? SOPAの抗議活動は難しいでしょう。しかし、あなたは深く先読みについてできることを注意深く読んでおくべきです。また、これが宿題の場合は、正しくタグ付けしてください。 –

+0

深度優先検索と「itertools」で読書を行います。ありがとうございました。 – user1156980

答えて

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'] 
関連する問題