Определение
Множеством называется структура данных, в которой хранится набор элементов. Важным свойством множеств является тот факт, что все их элементы различны. Основные операции над множествами – вставка, поиск и удаление. Множества реализованы так, что все эти операции эффективны, что часто позволяет улучшить время работы алгоритмов, в которых множества используются.
Чтобы задать множество, можно перечислить его элементы внутри фигурных скобок. Например,создадим множество гласных букв русского алфавита:
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}")
Выполнив пример несколько раз, мы снова видим разную последовательность вывода букв.
Операции
- Объединением множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые принадлежат по крайней мере одному из множеств \(A\) или \(B\).
Обозначение:
|
a = {1, 2, 3} b = {3, 4, 5} c = a | b print(f"{c}")
Вывод программы:
{1, 2, 3, 4, 5}
- Пересечением множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые являются общими элементами множеств \(A\) и \(B\).
Обозначение:
&
a = {1, 2, 3} b = {3, 4, 5} c = a & b print(f"{c}")
Вывод программы:
{3}
- Разностью множеств \(A\) и \(B\) называется множество, состоящее из тех элементов множества \(A\), которые не принадлежат множеству \(B\).
Обозначение:
-
a = {1, 2, 3} b = {3, 4, 5} c = a - b print(f"{c}")
Вывод программы:
{1, 2}
- Симметрической разностью множеств \(A\) и \(B\) называется множество, состоящее из тех и только тех элементов, которые не являются общими элементами множеств \(A\) и \(B\).
Обозначение:
^
a = {1, 2, 3} b = {3, 4, 5} c = a ^ b print(f"{c}")
Вывод программы:
{1, 2, 4, 5}
- Совпадение двух множеств.
Обозначение:
==
a = {1, 2, 3} b = {3, 1, 2} c = a == b print(f"{c}")
Вывод программы:
True
- Подмножество. Все элементы первого множества есть во втором.
Обозначение:
<=
a = {1, 2, 3} b = {3, 1, 2, 4} c = a <= b print(f"{c}")
Вывод программы:
True
- Надмножество. Первое множество содержит все элементы второго.
Обозначение:
>=
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} |
set.remove(x) |
Удаляет из множества \(set\) элемент, значение которого равно \(x\). Если элемент не принадлежит множеству, то вызывает KeyError |
>>> a = {1, 2} |
set.discard(x) |
Удаляет элемент \(x\), если он принадлежит множеству \(set\). |
>>> a = {1, 2} |
set.pop() |
Удаляет произвольный элемент во множестве \(set\) и возвращает его. Если множество пустое, то вызывает KeyError |
>>> a = {3, 1, 2} |
set.clear() |
Удаляет все элементы множества \(set\) |
>>> a = {1, 2, 3} |
set.copy() |
Копирует множество \(set\) |
>>> a = {1, 3, 2} |
Ввод и вывод множества
Для ввода целых чисел через пробел можно использовать следующую конструкцию:
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")
Эдам
Чеддер
Гауда