Codebra
29 января 2026 в 18:32

Урок 29. Отношения между множествами и операции над ними

Какие отношения между множествами существуют в Python и операции над ними.
📝

Внимание! На этой странице вы найдете материал урока из архивного курса по Python. Курс был написан в 2024 году и по-прежнему актуален для начинающих разработчиков.

Теоретический материал сохранен в исходном виде, а практические задания с автоматической проверкой вынесены в отдельные интенсивы и задания.

Полный список уроков доступен по тегу Архивный курс по Python и на странице первого урока.

📝 Кратко
  • Отношения между множествами: равные множества, непересекающиеся множества, подмножество и надмножество.
  • Операции над множествами: объединение, пересечение, разность, симметрическая разность.
  • Методы множеств: issubset(), issuperset(), update(), intersection(), intersection_update(), difference(), difference_update(), symmetric_difference(), symmetric_difference_update().
  • Структура frozenset делает множество неизменяемым.

В предыдущем уроке мы познакомились с методами множеств в Python. В этом уроке более подробно разберемся с отношениями между множествами и операциями над ними в Python.

Отношения между множествами

Равные множества

Какие множества называются равными? Множества равны, если они состоят из одинаковых элементов:

s_1 = {1, 2, 3}
s_2 = {1, 3, 2}
print(s_1 == s_2) # => True

Непересекающиеся множества

Два множества не пересекаются, если они не имеют общих элементов. Чтобы определить пересечение множеств можно использовать метод intersection(), где в круглых скобках указываются через запятую множества, пересечения которых необходимо найти:

s_1 = {1, 4}
s_2 = {3, 4}
s_3 = {4}
print(s_1.intersection(s_2, s_3)) # => {4}

Если множества не пересекаются, то метод вернет пустое множество:

s_1 = {1, 2}
s_2 = {3, 4}
print(s_1.intersection(s_2)) # => set()

Еще лучше определять пересекаются множества или нет при помощи метода isdisjoint(), которые возвращают истину, если оба множества не имеют общих элементов.

s_1 = {1, 2}
s_2 = {3, 4}
print(s_1.isdisjoint(s_2)) # => True

Подмножество и надмножество

Если все элементы одного множества присутствуют в другом множестве, то первое называется подмножество, а второе надмножество. Методы issubset() и issuperset() проверяют, является ли множество (для которого вызывается метод) подмножеством или надмножеством, соответственно.

s_1 = {1, 2}
s_2 = {1, 2, 3}
print(s_1.issubset(s_2)) # => True
print(s_1.issuperset(s_2)) # => False
print(s_2.issuperset(s_1)) # => True

Если вам не нравятся эти методы, то подмножество можно найти, например, так:

print(s_1.intersection(s_2) == s_1) # => True

Пустое множество является подмножеством любого множества. Так же множество является подмножеством самого себя.

Что-то получилось слишком много слов «множества», что и сам запутался, поэтому давайте просто взглянем на картинку ниже, и все встанет на свои места.

Теперь перейдем к операциям над множествами, по которым кратко пробежались ранее и немного в этом уроке (метод intersection()).

Операции над множествами

Объединение множеств

Объединить два множества в Python можно несколькими способами: использовать оператор «вертикальная черта» (|) или «пайп», как бы назвали ее пользователи UNIX, или использовать метод union().

s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
print(s_1 | s_2) # => {1, 2, 3, 4}
print(s_1.union(s_2)) # => {1, 2, 3, 4}

Чтобы объединить два множества и не возвращать новое множество, используйте метод update(), который изменяет исходное.

Пересечение множеств

Множество из элементов, которые есть в обоих множествах, называется пересечением. Найти пересечение множеств можно так же несколькими способами: используя оператор «амперсанд» (&) или метод intersection():

s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
print(s_1 & s_2) # => {1, 2}
print(s_1.intersection(s_2)) # => {1, 2}

Так же есть метод intersection_update(), который работает точно так же, как и intersection(), только не возвращает новое множество, а изменяет текущее.

Разность множеств

Под разностью множеств понимается набор элементов, которые есть в первом, но нет во втором множестве. Для этого есть оператор «минус» (-) и метод difference().

s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
print(s_1 - s_2) # => {4}
print(s_1.difference(s_2)) # => {4}

Аналогично, для разности множеств есть метод differenсe_update(), который изменяет множество, а не возвращает новое, как метод differenсe().

Симметрическая разность множеств

Набор из элементов одного множества, которых нет во втором и элементов второго множества, которых нет в первом. Получить симметрическую разность можно при помощи оператора (^) или метода symmetric_difference():

s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
print(s_1 ^ s_2) # => {3, 4}
print(s_1.symmetric_difference(s_2)) # => {3, 4}

Думаю, вы уже догадались, что есть метод symmetric_difference_update().

Стоит добавить, что методы union()intersection() и difference() (и их аналоги) могут работать сразу с несколькими множествами, т.е. больше чем с двумя:

s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
s_3 = {4, 5, 1}
print(s_1 | s_2 | s_3) # => {1, 2, 3, 4, 5}
print(s_1.union(s_2, s_3)) # => {1, 2, 3, 4, 5}

Структура frozenset

Множество можно сделать неизменяемым. Для этих целей есть структура frozenset, о которой ранее ничего не говорили.

fs = frozenset([1, 2, 4])
fs.add(3) # => AttributeError: 'frozenset' object has no attribute 'add'

Если попробовать добавить элемент в frozenset, то возникнет исключение AttributeError. Об исключениях и как их обрабатывать поговорим в уроке про исключения.

В этом уроке достаточно подробно разобрались с отношениями между множествами и тем, какие операции над ними можно выполнять. В следующем уроке начнем знакомство с кортежами в Python.

📝

Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу Python.