2012-11-28 5 views
5

때때로 여러 배열 레이어에 중첩 될 수있는 데이터가있는 상황이 있습니다.여러 배열에 중첩 된 배열을 반환하는 가장 간단한 방법

데이터가 같이 중첩 될 수있는 몇 가지 시간 :

[ [ 'green', 'blue', 'red' ] ] 

다른 시간

[[[ ['green', 'blue', 'red' ] ]]] 

내가 배열을 추출하고 반환 할, 무슨 일이 일의 가장 파이썬 방법이 될 것이다?

+1

상위 목록에 다른 요소가 있습니까? 아니면 초과 네 스팅을 제거하려고하십니까? –

+0

참조 http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python –

+1

"중첩"을 제거하는 것은 쉽습니다. 첫 번째 장소, 즉 예측할 수없는 결과가 없다면 어딘가에 주소 지정이 필요한 결함이 있습니다. ... –

답변

3

NumPy와는 항상 당신의 가장 친한 친구 : squeeze() 모든 차원을 제거

>>> import numpy as np 
>>> a = [[[ ['green', 'blue', 'red' ] ]]] 
>>> print np.squeeze(a) 
['green' 'blue' 'red'] 

NumPy와 기능이 귀하의 배열에 1입니다.

+1

항상 '가장 친한 친구'와 동의하지 마세요. +1 –

+0

:) 이유가 무엇입니까? 너 피는 과거에 널 실망 시켰어? –

3
def get_nested_list(a): 
    if len(a) == 1 and isinstance(a[0], list): 
     return get_nested_list(a[0]) 
    return a 

예 :

>>> get_nested_list([[[ ['green', 'blue', 'red' ] ]]]) 
['green', 'blue', 'red'] 
>>> get_nested_list([[[[1, 2],[3]]]]) 
[[1, 2], [3]] 
+0

단일 요소가 중첩 된 경우에만 유용합니다. – asheeshr

+0

@AshRj : 다중 요소 목록을 몇 가지 정상적으로 처리합니다. –

+0

첫 번째 테스트는 빈 목록을 확인하는 것이라고 가정합니다. 하지만 이미 빈리스트를 처리 할 체크 len (a) == 1이 있습니다. – asheeshr

0

재귀 솔루션 :

def strip(a): 
    if len(a)==1: 
     if isinstance(a[0], list): 
      a=a[0] 
      return strip(a) 
     else: 
      return a 
    return a 
+0

[[1,2], [3,4]]? – asheeshr

+0

@AshRj, 그런 경우에 예상되는 출력은 무엇입니까? –

+0

프로그램의 상태에 따라 첫 번째 목록이나 두 번째 목록을 반환 할 수 있습니다. – asheeshr

관련 문제