Создание плоского списка из многоуровневого вложенного списка

Возможный дубликат:
Сгладить (нерегулярный) список списков в Python

У меня есть следующий список –

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

И мне нужно сделать его плоским –

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

Для этого в настоящее время я использую цикл for с isinstance , число циклов – #nests - 1 .

Каким будет самый простой способ сделать вложенный список плоской? Спасибо.

Аналогичный вопрос, связанный с составлением плоского списка из вложенных списков (только), можно найти здесь: Создание плоского списка из списка списков в Python .

Исправлено из webhelpers.misc.flatten

 def flatten(iterable): """Recursively iterate lists and tuples. """ for elm in iterable: if isinstance(elm, (list, tuple)): for relm in flatten(elm): yield relm else: yield elm 

EDIT: Итерируемый тест здесь довольно наивный и может быть улучшен путем проверки наличия __iter__ или экземпляра collections.Iterable __iter__ абстрактный базовый класс.

EDIT 2: @ChristopheD абсолютно прав, это обман, так что перейдите к связанному вопросу.

Попробуй это:

 def flat(mlist): result = [] for i in mlist: if type(i) is list: result.extend(flat(i)) else: result.append(i) return result