weranda
@weranda

Как обработать многоуровневый список?

Приветствую

Есть многоуровневый список и я запутался. Не могу сформировать то, что нужно, а нужно создать список уникальных значений. На скриншоте обозначил: проходимся по первым (вторым, третьим и четвертым) значениям элементов списка и получаем уникальные значения.

Скриншот с пояснениями (отметил только первые элементы):
5a55f7a69e7bf206898874.jpeg

Код (разбил для ясности восприятия):
my_list = 
[
    [
        ['M2', 'Комфорт 3'],
        ['L2', 'Комфорт 3','Герметон 10'],
        ['L3', 'Комфорт 10', 'Герметон 15'],
        ['жидкость']
    ],
    [
        ['M2', 'Комфорт 3'],
        ['L2', 'Комфорт 3', 'Герметон 10'],
        ['L3', 'Комфорт 10', 'Герметон 15'],
        ['']
    ],
    [    
        [''],
        ['L2', 'Комфорт 3', 'Герметон 10'],
        ['L3', 'Комфорт 10', 'Герметон 15'],
        ['жидкость']
    ],
    [
        [''],
        ['L2', 'Комфорт 3', 'Герметон 10'],
        ['L3', 'Комфорт 10', 'Герметон 15'],
        ['']
    ],
    [
        ['M2', 'Комфорт 3'],
        [''],
        [''],
        ['жидкость']
    ],
    [
        [''],
        ['L2', 'Комфорт 3', 'Герметон 10'],
        [''],
        ['']
    ],
    [
        [''],
        [''],
        [''],
        ['']
    ]
]


Подскажите пожалуйста как разгрести это.
  • Вопрос задан
  • 584 просмотра
Пригласить эксперта
Ответы на вопрос 3
solotony
@solotony
покоряю пик Балмера
"многоуровневый список" называется "деревом".

рекурсивно обходишь дерево, заносишь значения в ассоциативный массив
Ответ написан
Комментировать
Вот так попробуйте.
def get_values(value):
    values = []
    if isinstance(value, (list, tuple)):
        for v in value:
            values.extend(get_values(v))
    elif value:
        values.append(value)

    return values


print(set(get_values(my_list)))
Ответ написан
Комментировать
@zayacnk
Cлегка улучшенная версия.

def get_values(items):
    unique = set()
    for item in items:
        if isinstance(item, (list, tuple)):
            unique.update(get_values(item))
        else:
            unique.add(item)

    return unique
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы