Разбить множество на два случайных подмножества

Есть множество строк, полученное из списка удалением дубликатов:

keys = []
# заполнение списка keys
st = set(keys)

Нужно получить два множества st1 и st2 такие, что их объединение есть исходное множество st, и они не пересекаются, причём разбить случайным образом так, чтобы любое разбиение (а их всего 2^{st.size}) было равновероятно.

Как это можно сделать в python'е ?


Ответы (1 шт):

Автор решения: MBo

Сгенерировать случайное число от 0 до 2^{st.size}-1 и сопоставить единицы в его бинарном представлении с номерами элементов, составляющих первое подмножество.

Однако set не поддерживает индексацию, и для выполнения извлечения определённых элементов, видимо, придётся вернуться обратно к списку.

→ Ссылка