Найти в Дзене
Дойти до IT

Python - Множества

Оглавление

Множество

В 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}

Методы

Множества имеют множество методов, мы рассмотрим самые нужные из них:

  1. add(): Добавляет элемент в множество.
    my_set = {1, 2, 3}
    my_set.add(4)
    print(my_set) # Вывод: {1, 2, 3, 4}
  2. remove(): Удаляет элемент из множества. Если элемент не найден, возникает ошибка.
    my_set = {1, 2, 3}
    my_set.remove(2)
    print(my_set) # Вывод: {1, 3}
  3. discard(): Удаляет элемент из множества, если он там присутствует. Если элемент не найден, ничего не происходит.
    my_set = {1, 2, 3}
    my_set.discard(2)
    print(my_set) # Вывод: {1, 3}
  4. clear(): Удаляет все элементы из множества.
    my_set = {1, 2, 3}
    my_set.clear()
    print(my_set) # Вывод: set()
  5. union(): Возвращает объединение двух множеств.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    union_set = set1.union(set2)
    print(union_set) # Вывод: {1, 2, 3, 4, 5}
  6. intersection(): Возвращает пересечение двух множеств.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    intersection_set = set1.intersection(set2)
    print(intersection_set) # Вывод: {3}
  7. difference(): Возвращает разность двух множеств (элементы, присутствующие в одном множестве, но отсутствующие в другом).
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    difference_set = set1.difference(set2)
    print(difference_set) # Вывод: {1, 2}
  8. 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