0 знаков
29. Отношения между множествами и операции над ними
Кратко- Отношения между множествами: равные множества, непересекающиеся множества, подмножество и надмножество.
- Операции над множествами: объединение, пересечение, разность, симметрическая разность.
- Методы множеств:
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
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ