Мне нужно сгенерировать все k-подмножества n-множества с дополнительным ограничением, что некоторые пары элементов должны выбираться либо вместе, либо вообще не выбираться. Чтобы смоделировать это ограничение, я подумал о том, чтобы явно связать эти элементы как 2-кортежи и сохранить остальные как 1-кортежи.
Например, давайте предположим, что мне нужно выбрать все 3-элементные подмножества {1, 2, 3, 4, 5} с дополнительными ограничениями на то, что элементы 3 и 4 должны выбираться вместе. Тогда мой новый набор:
{(1,), (2,), (3, 4), (5,)}
и функцию, которую я хочу написать, нужно сгенерировать:
{1, 2, 5}, {1, 3, 4}, {2, 3, 4}, {3, 4, 5}.
Есть ли простой способ использования itertools (или, возможно, других модулей python, которых я не знаю) для получения этого результата? Меня не волнует порядок, в котором я получаю эти подмножества.
В случае, если это упрощает вещи: элемент не может быть связан с более чем одним другим элементом (например, (3, 5) не мог бы появиться в качестве дополнительного ограничения в моем примере).