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

Метод set.difference() в Python, разность множеств

Получить элементы множества, которых нет в последовательности

Синтаксис:

# Метод
set.difference(*others)

# Математический оператор
set1 - set2 - ...

Параметры:

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

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

Описание:

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

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

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

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

Для того, что-бы изменить множество set используйте метод set.difference_update().

Примеры нахождения разности множеств:

>>> sets = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
>>> fset = frozenset({0, 1, 2, 3, 4})
>>> lists = [3, 5, 6, 7]
>>> tuples = (1, 7, 8, 9)

# Использование метода
>>> sets.difference(lists, tuples)
# {0, 2, 4, 10, 11}

# Дубликаты игнорируются
>>> fset.difference(lists, tuples)
# frozenset({0, 2, 4})


# Использование бинарного оператора все
# объекты должны быть множествами
>>> sets - lists - tuples - fset
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: unsupported operand type(s) for -: 'set' and 'list'

# Все объекты должны быть множествами
>>> sets - frozenset(lists) - frozenset(tuples) - fset
# {10, 11}

# Тип получаемого результата зависит от первого операнда
>>> fset - frozenset(lists)
# frozenset({0, 1, 2, 4})