Удалить меньший список с общими элементами в списке списков - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть список таких списков:

[[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

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

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]

Так как [1, 2] и [2, 4, 6] имеют общий элемент 2, а

len([2, 4, 6]) > len([1, 2])

Я не могу придумать, как сделать это без ужасных вложенных циклов. Спасибо!

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете сделать что-то вроде этого:

data = [[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

result = []
for e in sorted(data, key=len, reverse=True):
    if not any(set(e).intersection(prev) for prev in result):
        result.append(e)

print(result)

выход

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...