Есть ли стандартная библиотека такому коду?
Написал код, который смотрит, если есть одинаковые элементы в комбинациях, то это одни и те же комбинации. Есть ли стандартная библиотека для такого кода?
import copy
ls = [{379, 380},
{373, 374, 382},
{376, 373, 374, 375}]
def get_lst(lst, rows):
cash = copy.deepcopy(lst)
for ind, set_el in enumerate(lst):
for el_rows in rows:
if el_rows in set_el:
cash[ind] = cash[ind] | rows
return cash
cash.append(rows)
return cash
out_lst = [ls[0]]
for el_ls in ls[1:]:
out_lst = get_lst(lst=out_lst,
rows=el_ls)
for _ in out_lst:
print(_)
Результат будет:
{379, 380}
{373, 374, 375, 376, 382}
Ответы (1 шт):
Автор решения: Alex Titov
→ Ссылка
Ну можно предложить такой рекурсивный вариантик, уж не знаю, он понятнее и насколько короче.
import itertools
ls = [{379, 380}, {373, 374, 382}, {377, 380},
{376, 373, 374, 375}, {381}, {382}, {382, 383}]
def merge_sets(ls, from_, to):
'''Функция модифицирует исходный список'''
for i, j in itertools.combinations(range(from_, to), 2):
if (ls[i] & ls[j]):
ls[i] |= ls[j]
del(ls[j])
return merge_sets(ls, i, to - 1)
return to
merge_sets(ls, 0, len(ls))
print(ls)