Как я могу создать набор наборов в 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)

4 ответа

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

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

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

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

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

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

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

По состоянию на 2020 год в официальной документации Python рекомендуется использоватьfrozenset для представления наборов наборов.

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

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!
Другие вопросы по тегам