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

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

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

В уроке 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Знакомство с Python
Работа с файлами в Python Знакомство с Python
Типы данных в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Внутреннее устройство и сортировка словаря в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Методы и особенности множеств в PythonЗнакомство с Python
Условная инструкция if-elif-else в PythonЗнакомство с Python
<
×
>
Раздел «Знакомство с Python»
1. УРОК: Первое знакомство с Python
2. ТЕСТ: Небольшой первый тест по Python
3. УРОК: Переменные и комментарии в Python
4. ТЕСТ: Тест по основным понятиям и работе с сайтом
Самые основы
5. УРОК: Погружение в Python
6. ТЕСТ: Второй вводный тест по Python
7. УРОК: Типы данных в Python
8. УРОК: Форматирование строк в Python
9. УРОК: Условная инструкция if-elif-else в Python
10. УРОК: Преобразование и проверка типов в Python
11. УРОК: Вызов методов цепочкой в Python
Циклы
12. УРОК: Первое знакомство с циклами в Python
13. ТЕСТ: Тест по циклам Python
Немного рандома
14. УРОК: Генерируем случайные числа на Python
15. ТЕСТ: Тест по модулю random Python
Структуры данных
16. УРОК: Структуры данных в Python
17. ТЕСТ: Тест по структурам Python
Списки
18. УРОК: Списки в Python
19. ТЕСТ: Тест по спискам Python
20. УРОК: Изменение списка на месте в Python
21. УРОК: Дополнительно про списки в Python
22. УРОК: Конкатенация и сортировка списков в Python
23. ТЕСТ: Заключительный тест по спискам в Python
Словари
24. УРОК: Словари в Python
25. ТЕСТ: Тест по словарям Python
26. УРОК: Словари и списки: еще глубже
27. УРОК: Перебор элементов словаря в Python
28. УРОК: Внутреннее устройство и сортировка словаря в Python
29. УРОК: Методы словарей и функция len() в Python
30. ТЕСТ: Заключительный тест по словарям
Множества
31. УРОК: Множества в Python
32. УРОК: Методы и особенности множеств в Python
УРОК 33. Отношения между множествами и операции над ними
Вы здесь
34. ТЕСТ: Тест по методам множеств в Python
35. ТЕСТ: Тест по операциям над множествами в Python
Кортежи
36. УРОК: Кортежи в Python
37. УРОК: Более подробно о кортежах в Python
38. ТЕСТ: Тест по кортежам в Python
Снова циклы и немного исключений
39. УРОК: Контроль хода выполнения программы в Python
40. УРОК: Цикл while в Python
41. УРОК: Операторы break, continue и pass в Python
42. УРОК: Циклы for/else и while/else в Python
43. УРОК: Обработка исключений (try/except) в Python
44. ТЕСТ: Тест по циклам и управляющим конструкциям
45. ТЕСТ: Тест по обработке исключений
Работаем с файлами
46. УРОК: Работа с файлами в Python
47. УРОК: Оператор with/as для работы с файлами в Python
48. ТЕСТ: Тест по работе с файлами в Python
Итераторы
49. УРОК: Итераторы в Python
50. УРОК: List/dict/set comprehensions (включения) в Python
51. ТЕСТ: Тест по включениям в Python
Функции
52. УРОК: Основы функций в Python
53. ТЕСТ: Тест по основам функций в Python
54. УРОК: Область видимости в Python
55. ТЕСТ: Тест по области видимости в Python
56. УРОК: Замыкания и оператор nonlocal в Python
57. ТЕСТ: Тест по замыканиям и nonlocal в Python
58. УРОК: Аргументы и параметры функций, операторы * и ** в Python
59. ТЕСТ: Тест по аргументам и параметрам функций в Python
60. ТЕСТ: Тест по операторам * и ** в Python
61. УРОК: Анонимные функции: выражения lambda
62. УРОК: Функциональное программирование: map, filter и reduce
63. ТЕСТ: Тест по парадигме функционального программирования
64. УРОК: Генераторы и оператор yield в Python
65. ТЕСТ: Тест по генераторным функциям и выражениям
Модули
66. УРОК: Модули в Python
67. УРОК: Написание модулей в Python
68. УРОК: Пакеты модулей в Python
69. УРОК: Еще о возможностях модулей в Python
70. ТЕСТ: Тест по модулям и пакетам в Python
Объектно-ориентированное программирование
71. УРОК: Основы объектно-ориентированного программирования (ООП) в Python
72. ТЕСТ: Тест по основам ООП в Python
73. УРОК: Основы написания классов в Python
74. УРОК: Продолжаем написание классов в Python
75. УРОК: Более глубокое изучение классов в Python
76. УРОК: Что дальше?
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно