Создание плоского списка из многоуровневого вложенного списка
Возможный дубликат:
Сгладить (нерегулярный) список списков в Python
У меня есть следующий список –
[1,[2,3],4,[5,[6,7]]]
И мне нужно сделать его плоским –
[1,2,3,4,5,6,7]
Для этого в настоящее время я использую цикл for
с isinstance
, число циклов – #nests - 1
.
Каким будет самый простой способ сделать вложенный список плоской? Спасибо.
Аналогичный вопрос, связанный с составлением плоского списка из вложенных списков (только), можно найти здесь: Создание плоского списка из списка списков в Python .
- У экземпляра _ElementInterface нет атрибута 'tostring'
- Является ли объектный файл списком по умолчанию?
- Связывание аргументов Python
- App Engine выбрасывает 404 не найден для любого пути, но root
- Слияние двух целых чисел в 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
- Внедрение кометы / сервера в Google App Engine в Python
- Какой лучший способ обойти «статические переменные» в Python?
- Понимание кода Python
- Python 2.7 Комбинируйте abc.abstractmethod и classmethod
- Как получить индекс списка и элемент одновременно в Python?
- Объект 'str' не имеет атрибута '_meta'
- Является ли это «питоновым» методом выполнения функций как оператора switch python для значений кортежа?
- Создайте 32-разрядный exe из кода python на 64-битной машине
- Полезность def __init __ (self)?