Есть ли стандартная библиотека такому коду?

Написал код, который смотрит, если есть одинаковые элементы в комбинациях, то это одни и те же комбинации. Есть ли стандартная библиотека для такого кода?

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)
→ Ссылка