Глава 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, без установки