← Назад к вопросам

Что такое множество (Set) в Python?

1.3 Junior🔥 281 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Set (множество) в Python

Set — это встроенный тип данных в Python, который представляет неупорядоченную коллекцию уникальных элементов. Это одна из четырёх основных встроенных коллекций в Python наряду с list, tuple и dict.

Основные характеристики

Уникальность: каждый элемент в множестве может присутствовать только один раз. Если попытаться добавить дубликат, он просто проигнорируется.

Неупорядоченность: элементы в множестве не имеют индексов, порядок их хранения не определён и может изменяться. Вы не можете обратиться к элементу по индексу.

Изменяемость: множество изменяемо (mutable) — вы можете добавлять и удалять элементы после создания.

Хеширование: элементы в set должны быть хешируемы (hashable) — это означает, что они должны иметь постоянный хеш-код. Поэтому list и dict нельзя добавить в множество, но tuple можно.

Создание множеств

# Создание пустого множества
my_set = set()

# Создание с элементами
set1 = {1, 2, 3, 4, 5}
set2 = {"apple", "banana", "cherry"}

# Из списка (автоматически удаляет дубликаты)
my_list = [1, 2, 2, 3, 3, 3, 4]
my_set = set(my_list)  # {1, 2, 3, 4}

# Из строки
letters = set("hello")  # {h, e, l, o}

Базовые операции

set1 = {1, 2, 3}
set2 = {2, 3, 4}

# Добавление элемента
set1.add(4)  # {1, 2, 3, 4}

# Удаление элемента
set1.remove(3)  # KeyError если элемента нет
set1.discard(3)  # ничего не происходит если элемента нет

# Проверка наличия
2 in set1  # True
5 in set1  # False

# Длина
len(set1)  # количество элементов

# Очистка
set1.clear()  # пустое множество

Теоретико-множественные операции

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Объединение (union)
set1 | set2  # {1, 2, 3, 4, 5, 6}
set1.union(set2)

# Пересечение (intersection)
set1 & set2  # {3, 4}
set1.intersection(set2)

# Разность (difference)
set1 - set2  # {1, 2}
set1.difference(set2)

# Симметрическая разность (symmetric difference)
set1 ^ set2  # {1, 2, 5, 6}
set1.symmetric_difference(set2)

Практические применения

Удаление дубликатов:

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = list(set(data))

Проверка общих элементов:

colors_liked_by_alice = {"red", "blue", "green"}
colors_liked_by_bob = {"blue", "green", "yellow"}

common = colors_liked_by_alice & colors_liked_by_bob  # {"blue", "green"}

Проверка подмножества и надмножества:

set_a = {1, 2}
set_b = {1, 2, 3, 4}

set_a.issubset(set_b)  # True
set_b.issuperset(set_a)  # True
set_a.isdisjoint({5, 6})  # True (нет общих элементов)

Фильтрация данных:

valid_ids = {1, 3, 5, 7, 9}
data_ids = [1, 2, 3, 4, 5]

filtered = [x for x in data_ids if x in valid_ids]

frozenset — неизменяемое множество

Если нужно неизменяемое множество (например, для использования как ключ в словаре):

immutable_set = frozenset([1, 2, 3])
# frozenset({1, 2, 3})

# Можно использовать как ключ
my_dict = {frozenset([1, 2]): "value"}

Временная сложность

ОперацияВременная сложность
add()O(1) в среднем
remove()O(1) в среднем
in (проверка)O(1) в среднем
union()O(len(set1) + len(set2))
intersection()O(min(len(set1), len(set2)))

Множество — одна из самых полезных структур данных для задач, требующих работы с уникальными элементами и быстрой проверкой принадлежности.