Множество
В Python есть структура данных, которая называется «множества». Она предназначена для хранения уникальных элементов. Множества могут содержать разные типы данных: числа, строки, кортежи и так далее.
Для того, чтобы создать множество можно воспользоваться функцией set
empty_set = set() # Создание пустого множества
Нельзя написать просто {} потому что это создаст пустой словарь. Однако можно создать с 1 элементом:
set_with_one_element = {1} # Множество с одним элементом 1
Основная задача множеств хранить в себе только уникальные элементы:
my_set = {1, 2, 2, 3, 4, 5} # Дубликат 2 будет удален
print(my_set) # Вывод: {1, 2, 3, 4, 5}
Методы
Множества имеют множество методов, мы рассмотрим самые нужные из них:
- add(): Добавляет элемент в множество.
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # Вывод: {1, 2, 3, 4} - remove(): Удаляет элемент из множества. Если элемент не найден, возникает ошибка.
my_set = {1, 2, 3}
my_set.remove(2)
print(my_set) # Вывод: {1, 3} - discard(): Удаляет элемент из множества, если он там присутствует. Если элемент не найден, ничего не происходит.
my_set = {1, 2, 3}
my_set.discard(2)
print(my_set) # Вывод: {1, 3} - clear(): Удаляет все элементы из множества.
my_set = {1, 2, 3}
my_set.clear()
print(my_set) # Вывод: set() - union(): Возвращает объединение двух множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set) # Вывод: {1, 2, 3, 4, 5} - intersection(): Возвращает пересечение двух множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
intersection_set = set1.intersection(set2)
print(intersection_set) # Вывод: {3} - difference(): Возвращает разность двух множеств (элементы, присутствующие в одном множестве, но отсутствующие в другом).
set1 = {1, 2, 3}
set2 = {3, 4, 5}
difference_set = set1.difference(set2)
print(difference_set) # Вывод: {1, 2} - symmetric_difference(): Возвращает симметрическую разность двух множеств (элементы, присутствующие только в одном из множеств).
set1 = {1, 2, 3}
set2 = {3, 4, 5}
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # Вывод: {1, 2, 4, 5}
frozenset
В Python frozenset — это тип данных, который аналогичен кортежу в контексте множеств. Он представляет собой неизменяемое множество.
my_frozenset = frozenset([1, 2, 3, 4])
print(my_frozenset) # Вывод: frozenset({1, 2, 3, 4})
Так как он является неизменяемым, его можно использовать в качестве ключа словаря:
frozen_set1 = frozenset([1, 2, 3])
frozen_set2 = frozenset([4, 5, 6])
my_dict = {frozen_set1: "Value 1", frozen_set2: "Value 2"}
print(my_dict[frozen_set1]) # Вывод: Value 1
У frozenset в Python есть несколько плюсов:
- гарантирует, что данные останутся неизменными после создания;
- может использоваться как ключ в словарях.
При этом frozenset не позволяет изменять содержимое с помощью методов add(), remove() или clear(). В отличие от обычного множества.
Индексация
В Python множества (set) и неизменяемые множества (frozenset) отличаются от списков (list) и кортежей (tuple) тем, что не поддерживают индексацию элементов. Это значит, что вы не можете получить доступ к элементам множества или frozenset по индексу, как это возможно со списками или кортежами.
my_set = {1, 2, 3}
print(my_set[0]) # Вызовет ошибку TypeError: 'set' object is not subscriptable
my_frozenset = frozenset([1, 2, 3])
print(my_frozenset[0]) # Вызовет ошибку TypeError: 'frozenset' object is not subscriptable
Поэтому если нам нужно найти какой-либо элемент или проверить его наличие, нужно воспользоваться следующим методом:
my_set = {1, 2, 3}
print(1 in my_set) # Вывод: True
my_frozenset = frozenset([1, 2, 3])
print(1 in my_frozenset) # Вывод: True