Частично сгладить список до заданного уровня - PullRequest
0 голосов
/ 01 марта 2019

Как отмечается в комментариях, большинство, если не все ответы на этот связанный вопрос терпят неудачу для списков, подобных:

ls = [1,2,[3,4]]

Более того, список может быть более глубоко вложенным.Как частично сгладить до заданного пользователем уровня (по умолчанию, до бесконечности)

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

Требуемый выход для ls2:

сгладить до уровня 1:

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

сгладить до уровня 2 (или выше)

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Один из способов сделать это

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

def make_list_of_list(a):
    return [[i]if not isinstance(i, list) else i for i in a]

def flatten(l):
    return [item for sublist in make_list_of_list(l) for item in sublist]

flatten(ls2) will result in [1, 2, 3, 4, [5, 6]]
flatten(flatten(ls2)) will result in [1, 2, 3, 4, 5, 6]
0 голосов
/ 01 марта 2019

Вы можете сделать это рекурсивно:

def flatten(l, level=None):
    if level == 0:
        return l
    flattened = []
    for item in l:
        if isinstance(item, list):
            flattened.extend(flatten(item, level-1 if level is not None else None))
        else:
            flattened.append(item)

    return flattened

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

print(flatten(ls2, level=1))
# [1, 2, 3, 4, [5, 6]]

print(flatten(ls2, level=2))
# [1, 2, 3, 4, 5, 6]

print(flatten(ls2))
# [1, 2, 3, 4, 5, 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...