Appiattisci un elenco irregolare di elenchi

| | | | | | | | | | | |

Sì, so che questo argomento è già stato trattato (qui, qui, qui, qui), ma per quanto ne so, tutte le soluzioni, tranne una, falliscono in un elenco come questo:

L = [[[1, 2 , 3], [4, 5]], 6] 

Dove si trova l'output desiderato

[1, 2, 3, 4, 5, 6] 

O forse ancora meglio, un iteratore. L'unica soluzione che ho visto che funziona per un annidamento arbitrario si trova in questa domanda:

def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") e non isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return risultato flatten(L) 

È il modello migliore? Ho trascurato qualcosa? Qualche problema?