# Метод
sets.symmetric_difference(other)
# Бинарный оператор
sets1 ^ sets2
other
- iterable
итерируемый объектsets
, sets1
и sets2
- множество frozenset
или set
.set
или frozenset
.Метод sets.symmetric_difference()
позволяет исключить из результата общие элементы для множества и последовательности, операцию еще называют симметричной разницей. Метод возвращает новое множество, в котором нет одинаковых элементов, встречающихся одновременно в множестве sets
и итерируемом объекте other
. При выполнении операции симметричного вычитания, дубликаты игнорируются.
Метод sets.symmetric_difference()
принимает в качестве аргумента other
любой объект, поддерживающий итерацию по своим элементам. Это может быть список, кортеж, список ключей словаря, или другое множество и т.д.
Операция симметричной разницы позволяет использовать бинарный оператор ^
(крышка), но при этом оба объекта должны быть множествами frozenset
или set
. Если это условие не выполнено поднимается исключение TypeError
. Бинарные операции, которые смешивают экземпляры set
с frozenset
, возвращают тип первого операнда. Например: frozenset('ab') ^ set('bc')
возвращает экземпляр frozenset
.
Эта операция поддерживается как неизменяемым frozenset
, так изменяемым множеством set
.
Для того, что-бы изменить множество sets
используйте метод sets.symmetric_difference_update()
.
>>> sets = {1, 2, 6, 7}
>>> fset = frozenset({0, 1, 2, 3, 4})
>>> lists = [3, 5, 6, 7]
>>> tuples = (1, 7, 8, 9)
# Использование метода
>>> sets.symmetric_difference(lists)
# {1, 2, 3, 5}
# Дубликаты игнорируются
>>> fset.difference(tuples)
# frozenset({0, 2, 3, 4})
# Использование бинарного оператора, все
# объекты должны быть множествами
>>> sets ^ tuples
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: unsupported operand type(s) for ^: 'set' and 'tuple'
# Все объекты должны быть множествами
>>>sets ^ frozenset(tuples)
# {2, 6, 8, 9}
# Тип получаемого результата зависит от первого операнда
>>> fset ^ set(lists)
# frozenset({0, 1, 2, 4, 5, 6, 7})