Изменяемый объект (например, список или набор) не может быть членом набора. Вы можете использовать морозильник, который является неизменным.
main_list = [[[('p', 'u'), ('r', 'w')], [('t', 'q')]],
[[('p', 'u'), ('r', 'w')], [('v', 'q')]],
[[('p', 'u'), ('r', 'w')], [('t', 's')]],
[[('p', 'u'), ('r', 'w')], [('v', 's')]],
[[('p', 'w'), ('r', 'u')], [('t', 'q')]],
[[('p', 'w'), ('r', 'u')], [('v', 'q')]],
[[('p', 'w'), ('r', 'u')], [('t', 's')]],
[[('p', 'w'), ('r', 'u')], [('v', 's')]],
[[('r', 'u'), ('p', 'w')], [('t', 'q')]],
[[('r', 'u'), ('p', 'w')], [('v', 'q')]],
[[('r', 'u'), ('p', 'w')], [('t', 's')]],
[[('r', 'u'), ('p', 'w')], [('v', 's')]],
[[('r', 'w'), ('p', 'u')], [('t', 'q')]],
[[('r', 'w'), ('p', 'u')], [('v', 'q')]],
[[('r', 'w'), ('p', 'u')], [('t', 's')]],
[[('r', 'w'), ('p', 'u')], [('v', 's')]]]
main_set = set(tuple(frozenset(innermost_list) for innermost_list in sublist) for sublist in main_list)
from pprint import pprint
pprint(main_set)
Выход:
{(frozenset({('r', 'u'), ('p', 'w')}), frozenset({('t', 'q')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('v', 'q')})),
(frozenset({('r', 'u'), ('p', 'w')}), frozenset({('v', 'q')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('t', 's')})),
(frozenset({('r', 'u'), ('p', 'w')}), frozenset({('t', 's')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('v', 's')})),
(frozenset({('r', 'u'), ('p', 'w')}), frozenset({('v', 's')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('t', 'q')}))}
Чтобы преобразовать обратно в исходную структуру вложенных списков:
new_list = [[list(frozen) for frozen in subtuple] for subtuple in main_set]
pprint(new_list)
Выход:
[[[('r', 'u'), ('p', 'w')], [('t', 'q')]],
[[('p', 'u'), ('r', 'w')], [('v', 'q')]],
[[('r', 'u'), ('p', 'w')], [('v', 'q')]],
[[('p', 'u'), ('r', 'w')], [('t', 's')]],
[[('r', 'u'), ('p', 'w')], [('t', 's')]],
[[('p', 'u'), ('r', 'w')], [('v', 's')]],
[[('r', 'u'), ('p', 'w')], [('v', 's')]],
[[('p', 'u'), ('r', 'w')], [('t', 'q')]]]
UPDATE:
Решение, которое удаляет дублирующиеся элементы на месте из входных данных.
unique = []
for item in main_list[:]:
frozen_item = frozenset(frozenset(innermost_list) for innermost_list in item)
if frozen_item not in unique:
unique.append(frozen_item)
else:
main_list.remove(item)