Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

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

Оглавление урока

В уроке 8.2. мы познакомились с методами множеств в 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

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

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

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

Теперь перейдем к операциям над множествами, по которым кратко пробежались в уроке 8.1. и немного в этом уроке (метод 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. Об исключениях и как их обрабатывать поговорим в уроке 10.5.

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

<
×
>
Раздел «Знакомство с Python»
Урок 1.1. Первое знакомство с Python
Тест 1.2. Небольшой первый тест
Урок 1.3. Переменные и комментарии в Python
Тест 1.4. Тест по основным понятиям и работе с сайтом
Урок 2.1. Погружение в Python
Тест 2.2. Второй вводный тест по Python
Урок 2.3. Типы данных в Python
Урок 2.4. Форматирование строк в Python
Урок 2.5. Условная инструкция if-elif-else в Python
Урок 2.6. Преобразование и проверка типов в Python
Урок 2.7. Вызов методов цепочкой в Python
Урок 3.1. Первое знакомство с циклами в Python
Тест 3.2. Тест по циклам Python
Урок 4.1. Генерируем случайные числа на Python
Тест 4.2. Тест по модулю random Python
Урок 5.1. Структуры данных в Python
Тест 5.2. Тест по структурам Python
Урок 6.1. Списки в Python
Тест 6.2. Тест по спискам Python
Урок 6.3. Изменение списка на месте в Python
Урок 6.4. Дополнительно про списки в Python
Урок 6.5. Конкатенация и сортировка списков в Python
Тест 6.6. Заключительный тест по спискам в Python
Урок 7.1. Словари в Python
Тест 7.2. Тест по словарям Python
Урок 7.3. Словари и списки: еще глубже
Урок 7.4. Перебор элементов словаря в Python
Урок 7.5. Внутреннее устройство и сортировка словаря в Python
Урок 7.6. Методы словарей и функция len() в Python
Тест 7.7. Заключительный тест по словарям
Урок 8.1. Множества в Python
Урок 8.2. Методы и особенности множеств в Python
Урок 8.3. Отношения между множествами и операции над ними
Вы здесь
Тест 8.4. Тест по методам множеств в Python
Тест 8.5. Тест по операциям над множествами в Python
Урок 9.1. Кортежи в Python
Урок 9.2. Более подробно о кортежах в Python
Тест 9.3. Тест по кортежам в Python
Урок 10.1. Контроль хода выполнения программы в Python
Урок 10.2. Цикл while в Python
Урок 10.3. Операторы break, continue и pass в Python
Урок 10.4. Циклы for/else и while/else в Python
Урок 10.5. Обработка исключений (try/except) в Python
Тест 10.6. Тест по циклам и управляющим конструкциям
Тест 10.7. Тест по обработке исключений
Урок 10.8. Что дальше?