
Множество — это неупорядоченная коллекция уникальных и неизменяемых элементов.
Особенности множества:
my_set = {1, 2, 3, 4, 5}
print(my_set)
#{1, 2, 3, 4, 5}my_set = {'один', 'два', 'три', 'четыре', 'пять'}
print(my_set)
#{'пять', 'три', 'два', 'четыре', 'один'}Множество может содержать любое количество элементов разных типов, но только те, которые неизменяемы. Т.е. можно создать множество из строк, чисел, кортежей, но нельзя из списков, словарей и т.п.
my_set = {2, 'три', (4, 5, 6)}
print(my_set)
#{2, 'три', (4, 5, 6)}Для этого передаем аргументом в функцию set() итерируемый объект (строку, список или кортеж):
my_str = 'строка'
my_set = set(my_str)
print(my_set)
#{'к', 'о', 'р', 'с', 'а', 'т'}Как видно из примера, элементы в множестве располагаются в рандомных местах, т.к. множество неиндексируемо.
Если мы возьмем строку в которой будет несколько одинаковых символов, то получим множество, состоящее только из уникальных элементов:
my_str = 'математика'
my_set = set(my_str)
print(my_set)
#{'т', 'м', 'е', 'и', 'а', 'к'}Создание множества из списка с помощью функции set():
my_list = [1, 2, 3, 4, 5, 2]
my_set = set(my_list)
print(my_set)
#{1, 2, 3, 4, 5}Если нужно создать пустое множество, то нужно пользоваться функцией set():
my_set = {}
my_set_2 = set()
print(type(my_set))
print(type(my_set_2))
#<class 'dict'>
#<class 'set'>Так как множество — неиндексируемо, значит получить элемент по индексу нет возможности.
Но мы можем получить доступ к элементам, например через цикл:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
for item in my_set:
print(item)
#пять
#четыре
#два
#один
#триЕсть нужный элемент в множестве или нет можно проверить с помощью in:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
print('один' in my_set)
#TrueЕсли элемента в множестве нет, получаем False:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
print('шесть' in my_set)
#FalseДобавление элементов в множество: set.add(elem)
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.add('шесть')
print(my_set)
#{'четыре', 'шесть', 'три', 'один', 'два', 'пять'}Удаление элемента из множества
Для этого есть несколько методов, рассмотрим каждый из них.
1) Удаление элемента из множества: set.remove(elem)
Если элемент есть в множестве, он будет удален, если его нет, то будет возвращена ошибка «KeyError»:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.remove('пять')
print(my_set)
#{'два', 'три', 'четыре', 'один'}my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.remove('шесть')
print(my_set)
#builtins.KeyError: 'шесть'2) Удаление элемента из множества: set.discard(elem)
Этот метод удобен когда вам не нужен возврат ошибки, в случае отсутствия элемента в множестве:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.discard('пять')
print(my_set)
#{'четыре', 'один', 'три', 'два'}my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.discard('шесть')
print(my_set)
#{'один', 'пять', 'четыре', 'три', 'два'}3) Удаление первого элемента из множества: set.pop()
Множества неупорядоченная коллекция, так что нельзя предугадать какой элемент будет удален:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.pop()
print(my_set)
#{'один', 'три', 'четыре', 'пять'}Также метод set.pop() вместе с удалением возвращает элемент, который был удален:
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
print(my_set.pop())
print(my_set)
#один
#{'четыре', 'три', 'два', 'пять'}Удалить все элементы множества: set.clear()
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
my_set.clear()
print(my_set)
#set()Копировать множество: set.copy()
my_set = {'один', 'два', 'три', 'четыре', 'пять'}
x = my_set.copy()
print(x)
#{'два', 'четыре', 'один', 'три', 'пять'}При объединении множеств a и b — получим новое множество, которое содержит все элементы множеств a и b.

Объединение с помощью оператора |:
a = {1, 2, 3}
b = {4, 5, 6}
print(a | b)
#{1, 2, 3, 4, 5, 6}Объединение с помощью метода set.union():
a = {1, 2, 3}
b = {4, 5, 6}
print(a.union(b))
#{1, 2, 3, 4, 5, 6}При пересечении множеств a и b — получим новое множество, в котором будут элементы, которые принадлежат обоим множествам.

Пересечение с помощью оператора &:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a & b)
#{4, 5}Пересечение с помощью метода set.intersection():
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a.intersection(b))
#{4, 5}При разности множеств a и b — получим новое множество, элементы которого содержатся только в множестве a.
raznost.png

Разность с помощью оператора -:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a - b)
#{1, 2, 3}Разность с помощью метода set.difference():
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a.difference(b))
#{1, 2, 3}При симметрической разности множеств a и b — получим новое множество, элементов, которые есть и в a и b, но не в обоих сразу.

Симметрическая разность с помощью оператора ^:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a ^ b)
#{1, 2, 3, 6, 7, 8}Симметрическая разность с помощью метода set.symmetric_difference():
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a.symmetric_difference(b))
#{1, 2, 3, 6, 7, 8}Определяем являются ли множества не пересекающимися, т.е. они оба не содержат общих элементов.
Проверка выполняется методом set.isdisjoint():
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
print(a.isdisjoint(b))
#Falsea = {1, 2, 3, 4, 5}
b = {6, 7, 8}
print(a.isdisjoint(b))
#TrueДлина множества: len(set)
my_set = {1, 2, 3}
print(len(my_set))
#3Максимальный элемент в множестве: max(set)
my_set = {1, 2, 3}
print(max(my_set))
#3Минимальный элемент в множестве: min(set)
my_set = {1, 2, 3}
print(min(my_set))
#1Сумма элементов множества: sum(set)
my_set = {1, 2, 3}
print(sum(my_set))
#6Отсортированный список из элементов множества: sorted(set)
my_set = {1, 4, 2, 3}
print(sorted(my_set))
#[1, 2, 3, 4]Грубо говоря, это те же множества, но с одним нюансом, в них нельзя добавлять новые элементы. Т.е. Frozenset — неизменяемый тип данных.
my_set = {1, 2, 3}
my_fset = frozenset(my_set)
print(type(my_fset))
my_fset.add(4)
#builtins.AttributeError: 'frozenset' object has no attribute 'add'Простой способ удалить не уникальные (повторяющиеся) элементы.
Превратить список в множество (т.к. в множестве только уникальные элементы) и потом обратно с конвертировать в список:
my_list = [1, 2, 3, 1, 2, 3]
my_set = set(my_list)
my_list = list(my_set)
print(my_list)
print(type(my_list))
#[1, 2, 3]
#<class 'list'>Содержание: