Панды: удалить дубликаты списков, содержащих одинаковые элементы - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть несколько списков, подобных этой форме:

master_list = [[2,3,5], [3,2,5], [2,3], [2], [3], [5, 6], [5,9], [5,6,9], [9,5,6]]

каждый подсписок в master_list является чтением строки из Excel. Число в списке указывает route_id.

Мне нужно получить уникальную комбинацию маршрутов, которая связана с назначением грузовика.

Итак, желаемый результат:

[[2,3,5], [9,5,6]]

последовательность чисел в sub_list не имеет значения, но должна быть та, которая содержит все route_id, а не частичные.

Так что я могу сделать:

truck_1 = [2,3,5]
truck_2 = [9,5,6]  

оценитьза помощь

1 Ответ

0 голосов
/ 01 ноября 2019

Вы можете перебрать все возможные комбинации маршрутов и проверить, содержит ли каждая комбинация все элементы из master_list:

from itertools import combinations, chain

all_items = set(chain.from_iterable(master_list))
combos = chain.from_iterable(combinations(master_list, i) for i in range(len(master_list)))

result = []
max_len = len(master_list)

for c in combos:
    if set(chain.from_iterable(c)) == all_items and len(c) <= max_len:
        max_len = len(c)
        result.append(c)
...