Сообщить об ошибке.

Метод set.symmetric_difference() в Python, симметричная разность

Исключает общие элементы для множества и последовательности

Синтаксис:

# Метод
set.symmetric_difference(other)

# Бинарный оператор
set1 ^ set2

Параметры:

Возвращаемое значение:

  • новое множество set или frozenset.

Описание:

Метод set.symmetric_difference() позволяет исключить из результата общие элементы для множества и последовательности, операцию еще называют симметричной разностью. Метод возвращает новое множество, в котором нет одинаковых элементов, встречающихся одновременно в множестве setи итерируемом объекте other. При выполнении операции симметричного разности, дубликаты игнорируются.

Метод set.symmetric_difference() принимает в качестве аргумента other любой объект, поддерживающий итерацию по своим элементам. Это может быть список, кортеж, список ключей словаря, или другое множество и т.д.

Операция симметричной разности позволяет использовать бинарный оператор ^ (крышка), но при этом оба объекта должны быть множествами frozenset или set. Если это условие не выполнено поднимается исключение TypeError. Бинарные операции, которые смешивают экземпляры set с frozenset, возвращают тип первого операнда. Например: frozenset('ab') ^ set('bc') возвращает экземпляр frozenset.

Эта операция поддерживается как неизменяемым frozenset, так изменяемым множеством set.

Для того, чтобы изменить множество set используйте метод set.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})