2014-02-07 58 views
7

我如何转换:如何在python中拼合嵌套列表?

THIS = \ 
['logging', 
['logging', 'loggers', 
    ['logging', 'loggers', 'MYAPP', 
    ['logging', 'loggers', 'MYAPP', '-handlers'], 
    ['logging', 'loggers', 'MYAPP', 'propagate'] 
    ] 
], 
['logging', 'version'] 
] 

到:

THAT = [ 
    ['logging'], 
    ['logging', 'version'], 
    ['logging', 'loggers'], 
    ['logging', 'loggers', 'MYAPP'], 
    ['logging', 'loggers', 'MYAPP', '-handlers'], 
    ['logging', 'loggers', 'MYAPP', 'propagate'] 
] 
在python

(不需要进行排序,只是变平)?

我试过很多东西,但找不到如何解决这个问题。

+1

http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-列表中的列表中的蟒蛇 – dstromberg

+1

请参阅[这个问题](http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python),尤其是[这个答案](http:///stackoverflow.com/a/406822/1535629)。 – senshin

+0

另请参阅:http://stackoverflow.com/questions/11377208/recursive-generator-for-flattening-nested-lists?rq=1 – wheaties

回答

2

解决与递归发电机

def flatten(items): 
    non_list_items = [] 

    for item in items: 
     if isinstance(item, list): 
      for inner_item in flatten(item): 
       yield inner_item 
     else: 
      non_list_items.append(item) 

    yield non_list_items 

测试对您输入:

from pprint import pprint 

>>> pprint(sorted(flatten(THIS))) 
[['logging'], 
['logging', 'loggers'], 
['logging', 'loggers', 'MYAPP'], 
['logging', 'loggers', 'MYAPP', '-handlers'], 
['logging', 'loggers', 'MYAPP', 'propagate'], 
['logging', 'version']] 
+0

谢谢我一直在努力争取这个年龄 – jbrown

1

这是一个递归函数真正的亮点:

def flatten(myList): 
    def inner(current, acc): 
    items = [] 
    for x in myList: 
     if isinstance(x, list): 
     acc.extend(inner(x, [])) 
     else: 
     items.append(x) 
    acc.extend(items) 
    return acc 

    return inner(myList, []) 

我认为应该做的伎俩。