
Шаг 4. Множества
Баллов за прохождение: 1
Множество
В Python множества (set) являются структурой данных, предназначенной для хранения набора уникальных элементов. Они могут содержать любые неизменяемые типы данных, такие как числа, строки и кортежи.
Для того, чтобы создать множество можно воспользоваться функцией 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
Это кортеж в мире множеств, так как 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 включают гарантию, что набор данных останется неизменным после его создания, и возможность использования в качестве ключа в словарях. Однако frozenset не поддерживает методы, изменяющие его содержимое, такие как add(), remove(), clear() и другие, доступные для обычных множеств.
Индексация
Множества (set) и неизменяемые множества (frozenset) в Python не поддерживают индексацию элементов, в отличие от списков (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