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

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

Для определения длины (числа элементов) множества используется функция len:

a={"abc", (1,2), 5, 4, True}
len(a)

Для проверки наличия значения в множестве используется оператор in:

"abc" in a

Он возвращает True, если значение имеется и False в противном случае. Или можно проверить на непринадлежность какого-либо значения:

7 not in a

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

Для любых двух множеств:

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

можно вычислять их пересечение, то есть, находить значения, входящие в состав обоих множеств. Это делается с помощью оператора &:

setA & setB

Здесь создается новое множество с соответствующими значениями. Сами исходные множества остаются без изменений. Мы можем сохранить ссылку на этот результат вот так:

res = setA & setB

Или, сделать так:

setA = setA & setB

это же будет эквивалентно такой записи:

setA &= setB

Если пересекающихся значений нет, например, вот с таким множеством:

setC = {9, 10, 11}

то результатом:

setA & setC

будет пустое множество.

Этот оператор можно заменить эквивалентным методом intersection:

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

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

res = setA.intersection(setB)

Но если мы хотим выполнить эквивалент вот такой операции:

setA &= setB

то для этого следует использовать метод intersection_update:

setA.intersection_update(setB)

Теперь множество seta хранит результат пересечения.

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

Противоположная операция – объединение двух множеств выполняется с помощью оператора |:

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

на выходе получим новое множество неповторяющихся значений из обоих множеств:

{1, 2, 3, 4, 5, 6, 7}

Эту же операцию можно записать и так:

setA |= setB

тогда на результат объединения будет ссылаться переменная setA. Или же можно воспользоваться методом

setA.union(setB)

который возвращает множество из объединенных значений.

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

Следующая операция – это вычитание множеств. Например, для множеств:

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

операция

setA - setB

возвратит новое множество, в котором из множества setA будут удалены все значения, существующие в множестве setB:

{1, 2}

Или, наоборот, из множества setB вычесть множество setA:

setB – setA

получим значения

{5, 6, 7}

из которых исключены величины, входящие в множество setA.

Также можно выполнять эквивалентные операции:

setA -= setB  # setA = setA - setB
setB -= setA  # setB = setB - setA

В этом случае переменные setA и setB будут ссылаться на соответствующие результаты вычитаний.

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

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

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

{1, 2, 5, 6, 7}

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

Множества можно сравнивать между собой:

На равенство

setA == setB

В данном случае получим False, т.к. множества не равны. Они считаются равными, если все элементы, входящие в одно множество, также принадлежат другому множеству и мощности этих множеств равны (то есть они содержат одинаковое число элементов). Например, такие:

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

тогда оператор

setA == setB

вернет значение True. Как видите, порядок элементов в множествах не играет роли при их сравнении.

На неравенство

Противоположное сравнение на неравенство записывается так:

setA != setB

и возвращает True, если множества не равны и False, если равны.

На больше, меньше

В Python операторы <, > применительно к множествам, по сути, определяют вхождение или не вхождение одного множества в другое. Математически, одно множество принадлежит (входит) другому, если все элементы первого множества принадлежат элементам второго множества:

Например, возьмем множества

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

тогда операция

setB < setA

вернет True, а операция

setA < setB

значение False. Но, если хотя бы один элемент множества setB не будет принадлежать множеству setA:

setB.add(22)

то обе операции вернут False.

Для равных множеств

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

обе операции также вернут False. Но вот такие операторы:

setA <= setB
setA >= setB

вернут True.

Это основные операции работы над множествами. В качестве самостоятельного задания напишите программу, которая из введенного с клавиатуры текста определяет число уникальных слов. Для простоты можно полагать, что слова разделяются пробелом или символом переноса строки ‘\n’.

Видео по теме