Как создать набор наборов в Python?

Я пытаюсь создать набор наборов в Python. Я не могу понять, как это сделать.

Начиная с пустого набора xx:

xx = set([])
# Now we have some other set, for example
elements = set([2,3,4])
xx.add(elements)

но я получаю

TypeError: unhashable type: 'list'

или

TypeError: unhashable type: 'set'

Возможно ли иметь набор множеств в Python?

Я имею дело с большим набором наборов, и я хочу иметь возможность не иметь дело с дублирующими наборами (множество B множеств A1, A2,...., An "отменит" два набора, если Ai = Aj)

Ответ 1

Python жалуется, потому что внутренние объекты set изменяемы и, следовательно, не хешируются. Решение состоит в том, чтобы использовать frozenset для внутренних наборов, чтобы указать, что вы не намерены их модифицировать.

Ответ 2

Люди уже упомянули, что вы можете сделать это с помощью frozenset(), поэтому я просто добавлю код, как это сделать:

Например, вы хотите создать набор наборов из следующего списка списков:

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]

вы можете создать свой набор следующим образом:

t1 = set(frozenset(i) for i in t)

Ответ 3

Используйте frozenset внутри.

Ответ 4

Итак, у меня была такая же проблема. Я хотел создать структуру данных, которая работает как набор множеств. Проблема в том, что множества должны содержать неизменяемые объекты. Итак, вы можете просто сделать это как набор кортежей. Это сработало для меня!

A = set()
A.add( (2,3,4) )##adds the element
A.add( (2,3,4) )##does not add the same element
A.add( (2,3,5) )##adds the element, because it is different!