как извлечь все вложенные списки из вложенного списка? - PullRequest
1 голос
/ 03 ноября 2019

У меня есть вложенный список. Например:

['a', ['b', 'c', ['e', 'd']]]

Я хочу получить список, который содержит этот список и все подсписки отдельно в виде элементов. Итак, ожидаемые результаты:

[['a', ['b', 'c', ['e', 'd']]], ['b', 'c', ['e', 'd']], ['e', 'd']]

Я написал эту функцию:

def extract(lst):
    result = []
    result.append(lst)
    for i in lst:
        if isinstance(i, list):
            result.append(i)
            extractt(i)
    return result

Но результат не тот, который ожидался. как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2019

Вы можете использовать рекурсию с генератором:

def get_lists(d):
  if isinstance(d, list):
     yield d
     for i in d:
        yield from get_lists(i)

print(list(get_lists(['a', ['b', 'c', ['e', 'd']]])))

Выход:

[['a', ['b', 'c', ['e', 'd']]], ['b', 'c', ['e', 'd']], ['e', 'd']]
0 голосов
/ 03 ноября 2019

Я считаю, что ваш код отбрасывает результат рекурсивного вызова extract. Вы можете изменить это так:

def extract(lst):
    result = [lst]
    for i in lst:
        if isinstance(i, list):
            result += extract(i)
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...