Искать
Вы превысили запрос на
0 знаков

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

Не пройден
0
0

Кратко

- Отношения между множествами: равные множества, непересекающиеся множества, подмножество и надмножество.

- Операции над множествами: объединение, пересечение, разность, симметрическая разность.

- Методы множеств: issubset(), issuperset(), update(), intersection(), intersection_update(), difference(), difference_update(), symmetric_difference(), symmetric_difference_update().

- Структура frozenset делает множество неизменяемым.

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

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

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

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

Пример (python)
s_1 = {1, 2, 3}
s_2 = {1, 3, 2}
print(s_1 == s_2) # => True 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

Пример (python)
s_1 = {1, 4}
s_2 = {3, 4}
s_3 = {4}
print(s_1.intersection(s_2, s_3)) # => {4} 

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

Пример (python)
s_1 = {1, 2}
s_2 = {3, 4}
print(s_1.intersection(s_2)) # => set() 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

Пример (python)
s_1 = {1, 2}
s_2 = {3, 4}
print(s_1.isdisjoint(s_2)) # => True 

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

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

Пример (python)
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 

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

Пример (python)
print(s_1.intersection(s_2) == s_1) # => True 

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

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

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

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

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

Пример (python)
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} 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

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

Пример (python)
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} 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

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

Пример (python)
s_1 = {1, 2, 4}
s_2 = {1, 2, 3}
print(s_1 - s_2) # => {4}
print(s_1.difference(s_2)) # => {4} 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

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

Пример (python)
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} 

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

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

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

Пример (python)
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, о которой ранее ничего не говорили.

Пример (python)
fs = frozenset([1, 2, 4])
fs.add(3) # => AttributeError: 'frozenset' object has no attribute 'add' 

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

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

Тест

Две секундочки...

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Итоги раздела «Структуры данных в Python»Знакомство с Python
Первое знакомство с PythonЗнакомство с Python
Поиск общих папок с помощью CrackMapExec, SMBMap, smbclientРазведка и сканирование
Внутреннее устройство и сортировка словаря в PythonЗнакомство с Python
Поиск информации в общих папках с помощью manspiderРазведка и сканирование
Поиск сетевых уязвимостей с помощью Metasploit Framework (MSF)Разведка и сканирование
Поиск хостов с помощью NmapРазведка и сканирование
Поиск сетевых уязвимостей с помощью NmapРазведка и сканирование
Типы данных в PythonЗнакомство с Python
Впервые на сайте Codebra?

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

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

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

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

Закрыть окно