Сгладить вложенные списки, когда список содержит 1 единственный элемент, который является другим списком - PullRequest
0 голосов
/ 06 декабря 2018

По сути, я пытаюсь увидеть, могу ли я сгладить вложенные списки, когда список содержит 1 единственный элемент, который является другим списком.Например, возьмем такую ​​структуру данных:

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

Идеальный формат данных будет выглядеть следующим образом:

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

Эта вложенность может идти на любое количество уровней, но просто нужно сгладить одинсписок данных.Кто-нибудь знает способ сделать это?Самое близкое, что я получил к ответам на SO, было: Рекурсивное выравнивание списка Но это полностью выравнивает список в целом.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете использовать рекурсивную функцию, которая специально проверяет, есть ли только один элемент в данном списке, и является ли этот элемент списком, и если да, пропускает получение этого списка:

def simplify(l):
    if len(l) == 1 and isinstance(l[0], list):
        yield from simplify(l[0])
    else:
        for i in l:
            yield list(simplify(i)) if isinstance(i, list) else i

, так что:

list(simplify([['a', 'b', 'c', [['d', 'e', 'f']]]]))

возвращает:

['a', 'b', 'c', ['d', 'e', 'f']]
0 голосов
/ 06 декабря 2018

Рекурсивная функция может сделать это:

def flatten(l: list):
    if len(l) == 1:
        if isinstance(l[0], list):
            l = l[0]
    for i, elem in enumerate(l):
        if isinstance(type(elem), list):
            l[i] = flatten(elem)
    return l
...