Глава 11 · Очень много информации!

Множества

Коллекция без повторов и без позиций — быстрый способ убрать дубликаты и сравнивать наборы значений.

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

mnozhestva.py
chisla = {1, 2, 2, 3, 3, 3}
print(chisla)   # {1, 2, 3} — повторы исчезли сами

Зачем нужны множества?

Два самых частых случая: быстро убрать повторы из списка и быстро проверить, есть ли значение в коллекции.

primenenie_mnozhestv.py
spisok_s_povtorami = [1, 2, 2, 3, 1, 4]
unikalnye = set(spisok_s_povtorami)
print(unikalnye)   # {1, 2, 3, 4}
chlenstvo_mnozhestva.py
allowed = {"admin", "editor", "viewer"}
role = "editor"
if role in allowed:
    print("Доступ разрешён")
Множество не «случайно упорядочено» — оно просто не позиционное
Не стоит думать про set как про «список со случайным порядком». Правильная модель: у множества нет позиций вообще — писать my_set[0] нельзя (TypeError), и код никогда не должен полагаться на то, в каком порядке множество переберётся циклом.

Пустое множество — частая ловушка

pustoe_mnozhestvo.py
print(type({}))        # <class 'dict'> — это пустой словарь!
print(type(set()))    # <class 'set'> — а это пустое множество
{} — это пустой словарь, а не пустое множество
Фигурные скобки без содержимого Python по умолчанию считает пустым dict (§11.17), потому что словари появились в языке как более базовый случай использования {}. Чтобы создать пустое множество, нужно явно написать set().

add, remove, discard, pop, clear

metody_mnozhestv.py
tags = {"python", "beginner"}
tags.add("tutorial")
tags.discard("missing")   # без ошибки, даже если элемента нет
print(tags)
МетодЕсли элемента нет
.remove(x)KeyError
.discard(x)ничего не происходит, ошибки нет
pop() у множества удаляет ПРОИЗВОЛЬНЫЙ элемент
В отличие от list.pop(), у множества нет понятия «последний элемент» — set.pop() удаляет и возвращает какой-то один элемент, но заранее неизвестно какой.

Операции над множествами

operacii_mnozhestv.py
a = {1, 2, 3}
b = {2, 3, 4}

print(a | b)   # объединение: {1, 2, 3, 4}
print(a & b)   # пересечение: {2, 3}
print(a - b)   # разность: {1}
Полная алгебра множеств — в §11.16
Здесь — только знакомство. Венн-диаграммы для всех четырёх операций, подмножества и хешируемость разберём в следующем разделе.
Практика: множества и их операции
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →