2014-02-07 5 views
7

가 어떻게 변환 할 수 있습니다파이썬에서 중첩 목록을 병합하는 방법은 무엇입니까?

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'] 
] 

(그냥 평평하게, 정렬 할 필요가 없습니다)?

많은 것을 시도했지만 해결 방법을 찾을 수 없습니다. 내가 트릭을 할 것으로 판단

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, []) 

을 : 재귀 함수 정말 빛나는 곳

+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 

테스트로 해결 리스트 목록에있는 파이썬

+0

나는 이것을 얻기 위하여 나이를 노력하고 있습니다 – jbrown

1

이다.

from pprint import pprint 

>>> pprint(sorted(flatten(THIS))) 
[['logging'], 
['logging', 'loggers'], 
['logging', 'loggers', 'MYAPP'], 
['logging', 'loggers', 'MYAPP', '-handlers'], 
['logging', 'loggers', 'MYAPP', 'propagate'], 
['logging', 'version']] 
관련 문제