2012-11-28 10 views
5

Ho una situazione in cui sono presenti dati che a volte possono essere nidificati in più livelli di array.Il modo più semplice per restituire un array annidato in più array

Alcune volte i dati possono essere nidificate come:

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

Altre volte

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

Voglio estrarre la matrice e restituirlo, quale sarebbe il modo più divinatorio di fare questo?

+1

Esistono altri elementi negli elenchi genitori? o stai semplicemente cercando di spogliare il nidificazione in eccesso? –

+0

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

+1

Spogliare il "nesting" è facile - ma guarderei più per non averlo in primo luogo, vale a dire, se risultati imprevedibili - allora c'è un difetto da qualche parte che deve essere affrontato ... –

risposta

3

Numpy è il tuo migliore amico di sempre:

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

La funzione NumPy squeeze() rimuovere tutte le dimensioni che sono 1 nel tuo array.

+1

Non sono d'accordo con "il tuo migliore amico come sempre" - ma +1 –

+0

:) perché? Numpy ti ha mai deluso in passato? –

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

Esempi:

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

Ciò è utile solo se un singolo elemento è nidificato. – asheeshr

+0

@AshRj: ora gestisce gli elenchi di più elementi con un certo equilibrio. –

+0

Suppongo che il primo test sia la verifica di liste vuote? Ma c'è già un check len (a) == 1 che gestirà le liste vuote .. – asheeshr

0

soluzione ricorsiva:

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, quale sarebbe l'output previsto in quel caso? –

+0

A seconda dello stato del programma, è possibile restituire il primo elenco o il secondo elenco. – asheeshr

Problemi correlati