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

Множества в Python

Множества (set) в Python — это встроенный тип, предлагающий широкий набор возможностей, которые повторяют теорию множеств из математики. Тем не менее интерпретация может отличаться от той, что принята в математике. Set импортировать не нужно. А в этом материале вы узнаете о нем все, что потребуется для работы.

Что это

Множества — это неупорядоченная коллекция уникальных элементов, сгруппированных под одним именем. Множество может быть неоднородным — включать элементы разных типов. Множество всегда состоит только из уникальных элементов (дубли запрещены) в отличие от списков и кортежей в Python. Объект set — это также коллекция уникальных хэшируемых объектов. Объект называется хэшируемым в том случае, если его значение хэша не меняется. Это используется в ключах словарей и элементах множеств, ведь значения хэшей применяются в их внутренних структурах.

Чаще всего множества в Python используются для проверки на принадлежность, удаления повторов из последовательности и выполнения математических операций, таких как пересечение, объединение, поиск разностей и симметрических разностей. Изображение ниже показывает два примера множеств (алфавит и цифры), каждый из которых включает уникальные неизменяемые объекты.

Создание множеств Python

Создать объект set в Python можно двумя путями:

Примечание: не используйте зарезервированные ключевые слова и названия встроенных классов в качестве имен для множеств. Это не поощряется в программировании на Python.

Множество создается при размещении всех элементов внутри фигурных скобок <> , как показано на примере ниже.

s1 = > # Это создаст пустое множество s2 = 1, 'pythonru', 20.67> 

Еще один способ создать (или определить) множество Python — использовать функцию set() . Пример ниже.

s1 = set() # Это создаст пустое множество s2 = set(1, 'pythonru', 20.67>) 

Первый способ (с использованием фигурных скобок <> ) определенно проще.

Нет ограничений на количество элементов в объекте set , но запрещено добавлять элементы изменяемых типов, такие как список или словарь. Если попробовать добавить список (с набором элементов), интерпретатор выдаст ошибку.

s5 =  1, 2, 3, [5, 6, 7, 8] > Traceback (most recent call last): File "", line 1, in module> TypeError: unhashable type: 'list' 

Добавление элементов в множества Python

Объекты set в Python поддерживают добавление элементов двумя путями: по одному с помощью метода add() или группами с помощью update() . Оба описаны дальше.

Добавление одного элемента в множество Python

Один элемент можно добавить с помощью метода add() . Такой код выглядит следующим образом.

set1 = 1, 3, 4> set1.add(2) print(set1) 1, 2, 3, 4> 

Добавление нескольких элементов в множество Python

Больше одного элемента можно добавить с помощью update() . Код следующий.

set2 = 1, 2, 3> set2.update([4, 5, 6]) print(set2) # 

Удаление элементов из множеств Python

Один или несколько элементов можно удалить из объекта set с помощью следующих методов. Их отличие в виде возвращаемого значения.

remove()

Метод remove() полезен в тех случаях, когда нужно удалить из множества конкретный элемент и вернуть ошибку в том случае, если его нет в объекте.

Следующий код показывает метод remove() в действии.

set1 = 1, 2, 3, 4, 'a', 'p'> set1.remove(2) print(set1) 1, 3, 4, 'a', 'p'> set1.remove(5) # Error element not found 

discard()

Метод discard() полезен, потому что он удаляет конкретный элемент и не возвращает ошибку, если тот не был найден во множестве.

set1 = 1, 3, 4, 'a', 'p'> set1.discard('a') print(set1) # set1.discard(6) print(set1) # 

pop()

Метод pop() удаляет по одному элементу за раз в случайном порядке. Set — это неупорядоченная коллекция, поэтому pop() не требует аргументов (индексов в этом случае). Метод pop() можно воспринимать как неконтролируемый способ удаления элементов по одному из множеств в Python.

set1 = 1, 3, 4, “p”> set1.pop() 3 # случайный элемент будет удален (ваш результат может отличаться) 

Методы множеств Python

У объектов set есть несколько встроенных методов. Увидеть их все можно с помощью команды dir() . dir(object) в Python показывает самые важные атрибуты разных типов объектов.

Вот что выдаст функция для объекта set в Python.

set1 =  1, 2, 3, 4> dir(set1) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update'] 

Часто используемые функции множеств Python

Из всех методов, перечисленных в dir() , только несколько из них используются постоянно. Вы уже знакомы с add , update , remove , pop и discard .

Вот на какие также стоит обратить внимание.

Функция принадлежности (членства)

Она проверяет на наличие конкретного элемента в множестве.

num_set = 1 ,3, 5, 7, 9, 10> 7 in num_set # True 2 in num_set # False 1 not in num_set # False 

Разные функции

len(num_set) — вернет количество элементов в объекте set .

copy() — создает копию существующего множества и сохраняет ее в новом объекте.

clear() —очищает множество (удаляет все элементы за раз)

del — удаляет множество целиком

Дальше речь пойдет об операциях union , issubset , issuperset , difference_update и других.

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

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

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

При использовании на двух множествах вы получаете новый объект, содержащий элементы обоих (без повторов). Операция объединения в Python выполняется двумя способам: с помощью символа | или метода union() .

A = 1, 2, 3> B = 2, 3, 4, 5> C = A | B # используя символьный метод C = A.union(B) # используя метод union print(C) # 

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

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

A = 1, 2, 3, 4> B = 3,4,5,6> C = A & B # используя символьный метод C = A.intersection(B) # используя метод intersection print(C) # 

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

При использовании на двух множествах вы получаете новый объект, содержащий элементы, которые есть в первом, но не втором (в данном случае — в множестве “A”). Операция разности выполняется двумя способами: с помощью символа — или метода difference() .

A = 1, 2, 3, 4> B = 3,4,5,6> C = A - B # используя символьный метод C = A.difference(B) # используя метод difference print(C) # 

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

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

C = A ^ B # используя символьный метод C = A.symmetric_difference(B) # используя метод symmetric_difference print(C) # 

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

Множество B ( SetB ) называется подмножество A ( SetA ), если все элементы SetB есть в SetA . Проверить на подмножество в Python можно двумя способами: с помощью символа или метода issubset() . Он возвращает True или False в зависимости от результата.

A = 1, 2, 3, 4, 5> B = 2,3,4> B  A # используя символьный метод B.issubset(A) # используя метод issubset # True 

Множество A ( SetA ) называется надмножество B ( SetB ), если все элементы SetB есть в SetA . Проверить на надмножество в Python можно двумя способами: с помощью символа >= или метода issuperset() . Он возвращает True или False в зависимости от результата.

A = 1, 2, 3, 4, 5> B = 2,3,4> A >= B # используя символьный метод A.issuperset(B) # используя метод issubset # True 

Бонус

А теперь бонус для тех, кто дочитал до этого места. Многие начинающие программисты задаются вопросом, как удалить повторяющиеся элементы из списка?

Ответ: просто передайте список функции set() и все дубли будут удалены автоматически. Результат потом можно снова передать в функцию list() , чтобы он снова стал списком.

List1 = [1, 2, 3, 5, 3, 2, 4, 7] List_without_duplicate = set(List1) print(List_without_duplicate) # (1, 2, 3, 5, 4, 7) преобразован в множество back_to_list = list(List_without_duplicate) # [1, 2, 3, 5, 4, 7] снова преобразован в список 

Выводы

Теперь вы знакомы с объектами set в Python и теорией множеств на практике. Знаете как создавать множества, менять их, добавляя или удаляя элементы. Вы также знаете, как использовать метод dir и другие методы для множеств в Python. Наконец, познакомились с операциями union , intersection , difference , symmetric difference , subset и superset .

Источник

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

На выходе получаем новое множество, состоящее из значений, общих для множеств setA и setB. Это и есть операция пересечения двух множеств. При этом, исходные множества остаются без изменений. Здесь именно создается новое множество с результатом выполнения этой операции. Разумеется, чтобы в дальнейшем в программе работать с полученным результатом, его нужно сохранить через какую-либо переменную, например, так:

То есть, мы вычисляем результат пересечения и сохраняем его в переменной seta и, как бы, меняем само множество setA. А вот если взять множество:

будет пустое множество. Обычно, на практике используют оператор пересечения &, но вместо него можно использовать специальный метод:

setA = {1, 2, 3, 4} setB = {3, 4, 5, 6, 7} setA.intersection(setB)

Результат будет тем же, на выходе получим третье множество, состоящее из общих значений множеств setA и setB. Если же мы хотим выполнить аналог операции:

setA.intersection_update(setB)

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

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

setA = {1, 2, 3, 4} setB = {3, 4, 5, 6, 7} setA | setB

На выходе также получаем новое множество, состоящее из всех значений обоих множеств, разумеется, без их дублирования. Или же можно воспользоваться эквивалентным методом:

который возвращает множество из объединенных значений. При этом, сами множества остаются без изменений. Операцию объединения можно записать также в виде:

Тогда уже само множество setA будет хранить результат объединения двух множеств, то есть, оно изменится. Множество setB останется без изменений.

Вычитание множеств

возвратит новое множество, в котором из множества setA будут удалены все значения, повторяющиеся в множестве setB: <1, 2> Или, наоборот, если из множества setB вычесть множество setA:

то получим значения из которых исключены величины, входящие в множество setA. Также здесь можно выполнять эквивалентные операции:

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

Наконец, последняя операции над множествами – симметричная разность, возвращает множество, состоящее из неповторяющихся значений обоих множеств. Реализуется она следующим образом:

setA = {1,2,3,4} setB = {3,4,5,6,7} setA ^ setB

На выходе получим третье, новое множество, состоящее из значений, не входящих одновременно в оба множества.

Сравнение множеств

В заключение этого занятия я хочу показать вам, как можно сравнивать множества между собой. Предположим, имеются два таких множества:

setA = {7, 6, 5, 4, 3} setB = {3, 4, 5, 6, 7}

И мы хотим узнать, равны они или нет. Для этого, используется уже знакомый нам оператор сравнения на равенство:

Увидим значение True (истина). Почему? Дело в том, что множества считаются равными, если все элементы, входящие в одно из них, также принадлежат другому и мощности этих множеств равны (то есть они содержат одинаковое число элементов). Наши множества setA и setB удовлетворяют этим условиям. Соответственно, противоположное сравнение на не равенство, выполняется, следующим образом:

Следующие два оператора сравнения на больше и меньше, фактически, определяют, входит ли одно множество в другое или нет. Например, возьмем множества

setA = {7, 6, 5, 4, 3} setB = {3, 4, 5}

Источник

Читайте также:  Получить начало недели python
Оцените статью