2012-11-28 24 views
5

Mam sytuację, w której mam dane, które czasami mogą być zagnieżdżone w wielu warstwach macierzy.Najprostszy sposób na zwrócenie tablicy zagnieżdżonej w wielu tablicach

Kilka razy dane mogą być zagnieżdżone jak:

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

Inne czasy

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

chcę wyodrębnić tablicy i zwraca go, co byłoby najbardziej pythonic sposób to zrobić?

+1

Czy są jakieś inne elementy na listach nadrzędnych? czy po prostu chcesz pozbyć się nadmiernego zagnieżdżenia? –

+0

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

+1

Pozbycie się "zagnieżdżania" jest łatwe - ale wyglądałbym bardziej nie mieć go na pierwszym miejscu, tj. jeśli nieprzewidywalne wyniki - wtedy jest jakaś luka, która wymaga adresowania ... –

Odpowiedz

3

Numpy jest twoim najlepszym przyjacielem, jak zawsze:

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

Funkcja numpy squeeze() usunąć wszystkie wymiary, które są 1 w twojej tablicy.

+1

Nie zgadzam się z "twoim najlepszym przyjacielem jak zawsze" - ale +1 –

+0

:) dlaczego? Numpy kiedykolwiek zawiodła cię w przeszłości? –

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

Przykłady:

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

Jest to użyteczne tylko w przypadku zagnieżdżenia pojedynczego elementu. – asheeshr

+0

@AshRj: Teraz obsługuje listy wieloelementowe z pewnym zdrowiem. –

+0

Zakładam, że pierwszym testem jest sprawdzenie pustych list? Ale istnieje już kontrola len (a) == 1, która obsłuży puste listy .. – asheeshr

0

rekurencyjne rozwiązanie:

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, jakie byłyby oczekiwane wyniki w tym przypadku? –

+0

W zależności od stanu programu możesz chcieć zwrócić pierwszą listę lub drugą listę. – asheeshr

Powiązane problemy