Определение

Множеством называется структура данных, в которой хранится набор элементов. Важным свойством множеств является тот факт, что все их элементы различны. Основные операции над множествами – вставка, поиск и удаление. Множества реализованы так, что все эти операции эффективны, что часто позволяет улучшить время работы алгоритмов, в которых множества используются.

 

Чтобы задать множество, можно перечислить его элементы внутри фигурных скобок. Например,создадим множество гласных букв русского алфавита:

vowels  = {"а", "е", "ё", "и", "о", "у", "ы", "э", "ю", "я"}

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

empty_set = set()
n = len(empty_set)
print(f"Длина пустого множества равна {n}.")

Вывод программы:

Длина пустого множества равна 0.

Множество можно получить из списка или строки, применив к ним функцию set(). Например, создадим множество из строки:

word = "слово"
letters = set(word)
print(f"{letters}")

Выполнив программу два раза, получим следующий вывод программы:

{'о', 'л', 'в', 'с'}
{'с', 'в', 'л', 'о'}

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

 

Другое свойство множества — уникальность его элементов: они не имеют дублей.

 

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

 

Проверить, принадлежит ли значение множеству, можно с помощью оператора in.

 

Узнаем, принадлежит ли введённая буква русского алфавита к гласным:

letter = input()
vowels  = {"а", "е", "ё", "и", "о", "у", "ы", "э", "ю", "я"}
if letter.lower() in vowels:
    print(f"Гласная буква")
else:
    print(f"Согласная буква")

По элементам множества можно пройти в цикле:

vowels  = {"а", "е", "ё", "и", "о", "у", "ы", "э", "ю", "я"}
for letter in vowels:
    print(f"{letter}")

Выполнив пример несколько раз, мы снова видим разную последовательность вывода букв.

 

Операции

  1. Объединением множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые принадлежат по крайней мере одному из множеств \(A\) или \(B\).

     

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

     

    Обозначение: |

    a = {1, 2, 3}
    b = {3, 4, 5}
    c = a | b
    print(f"{c}")

    Вывод программы:

    {1, 2, 3, 4, 5}
  2. Пересечением множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые являются общими элементами множеств \(A\) и \(B\).

     

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

     

    Обозначение: &

    a = {1, 2, 3}
    b = {3, 4, 5}
    c = a & b
    print(f"{c}")

    Вывод программы:

    {3}
  3. Разностью множеств \(A\) и \(B\) называется множество, состоящее из тех элементов множества \(A\), которые не принадлежат множеству \(B\).

     

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

     

    Обозначение: -

    a = {1, 2, 3}
    b = {3, 4, 5}
    c = a - b
    print(f"{c}")

    Вывод программы:

    {1, 2}
  4. Симметрической разностью множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые не являются общими элементами множеств \(A\) и \(B\).

     

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

     

    Обозначение: ^

    a = {1, 2, 3}
    b = {3, 4, 5}
    c = a ^ b
    print(f"{c}")

    Вывод программы:

    {1, 2, 4, 5}
  5. Совпадение двух множеств.

    Обозначение: ==

    a = {1, 2, 3}
    b = {3, 1, 2}
    c = a == b
    print(f"{c}")

    Вывод программы:

    True
  6. Подмножество. Все элементы первого множества есть во втором.

    Обозначение: <=

    a = {1, 2, 3}
    b = {3, 1, 2, 4}
    c = a <= b
    print(f"{c}")

    Вывод программы:

    True
  7. Надмножество. Первое множество содержит все элементы второго.

    Обозначение: >=

    a = {1, 2, 3}
    b = {3, 1, 2, 4}
    c = b >= a
    print(f"{c}")

    Вывод программы:

    True

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

vowels  = {"а", "е", "ё", "и", "о", "у", "ы", "э", "ю", "я"}
letters = set("коллекция")
intersection = vowels & letters
print(*intersection)

Вывод программы:

и е я о

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

Метод Описание Пример
set.add(x) Добавляет элемент \(x\) во множество \(set\)
>>> a = {1, 2}
>>> a.add(3)
>>> a
{1, 2, 3}
set.remove(x) Удаляет из множества \(set\) элемент, значение которого равно \(x\). Если элемент не принадлежит множеству, то вызывает KeyError
>>> a = {1, 2}
>>> a.remove(1)
>>> a
{2}
set.discard(x) Удаляет элемент \(x\), если он принадлежит множеству \(set\).
>>> a = {1, 2}
>>> a.discard(12)
>>> a
{1, 2}
set.pop() Удаляет произвольный элемент во множестве \(set\) и возвращает его. Если множество пустое, то вызывает KeyError
>>> a = {3, 1, 2}
>>> b = a.pop()
>>> a
{2, 3}
>>> b
1
set.clear() Удаляет все элементы множества \(set\)
>>> a = {1, 2, 3}
>>> a.clear()
>>> a
{}
set.copy() Копирует множество \(set\)
>>> a = {1, 3, 2}
>>> b = a.copy()
>>> b
{1, 2, 3}

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

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

a = set(map(int, input().split()))

Если пользователь должен ввести \(n\) строк в столбик, то используется следующий синтаксис:

n = int(input())
a = {input() for _ in range(n)}

Для вывода элементов множества можно использовать цикл for или применить распаковку множества.

 

Пример вывода множества в строку:

numbers = {1, 2, 3, 4, 5}
print(*numbers)
1 2 3 4 5 

Пример вывода множества в столбец:

cheeses = {'Чеддер', 'Эдам', 'Гауда'}
print(*cheeses, sep="\n")
Эдам
Чеддер
Гауда

Практические задания