В прошлых уроках мы разобрали списки и кортежи — оба хранят данные в определённом порядке. Сегодня познакомимся с множеством — структурой, которая работает по совершенно другим правилам.
1. Что такое множество и чем оно отличается от списка и кортежа
Множество (set) — это неупорядоченный набор уникальных значений. Два ключевых слова здесь — «неупорядоченный» и «уникальных».
- Неупорядоченный — элементы не имеют фиксированного индекса. Нельзя сказать «дай мне первый элемент» или обратиться к данным через [0].
- Уникальных — если добавить в множество одно и то же значение дважды, оно всё равно будет храниться только один раз.
Создаётся множество с помощью фигурных скобок {}:
Вывод:
Когда использовать множество, а не список или кортеж
2. Для чего нужно множество в Python
Главная задача множества — хранить только уникальные значения и гновенно отвечать на вопрос: «есть этот элемент или нет?». В отличие от списка, множество автоматически отбрасывает дубликаты при добавлении — вам не нужно писать для этого никакого дополнительного кода.
Это особенно полезно в анализе данных, когда нужно, например, найти всех уникальных покупателей из длинного журнала транзакций, определить, какие клиенты совершили покупку и в январе, и в феврале, или выяснить, кто из клиентов не вернулся во второй месяц. Все эти задачи решаются в одну строку — с помощью операций объединения |, пересечения & и разности -, а именно
💡 Порядок вывода элементов множества не гарантирован — Python не обязан сохранять тот порядок, в котором вы записали элементы. Каждый раз вывод может быть разным.
Обратите внимание:
Вывод (порядок может отличаться):
💡 Множество автоматически убирает дубликаты. Если список покупателей содержит повторяющиеся ID, множество оставит только уникальные:
Обратите внимание:
Вывод:
Три дубликата исчезли автоматически — без какого-либо дополнительного кода.
3. Какие данные можно хранить в множествах
Неизменяемые данные
Множество принимает данные, которые неизменяемы: числа, строки, кортежи. Списки и другие множества хранить внутри нельзя — Python выдаст ошибку.
ОДНАКО, стоит только попробовать добавить во множество какой-то список
или другое множество
Получим на выводе:
Числа и переменные, которые на них ссылаются
Пример 1. Прямые числа в множестве — уникальные
артикулы товаров. Для усложнения список артикулов с дубликатами задан
сначала в виде обычного списка, а далее - преобразуется в множество —
остаются только уникальные:
Вывод:
Пример 2. Кортеж из переменных, ссылающихся на номера регионов, преобразуется в множество:
Вывод:
Строки
Пример 1. Уникальные источники трафика в аналитике, заданные сначала в виде множества. Обратите внимание, что одна и та же переменная sources переопределяет саму себя. Так можно, а иногда даже и нужно делать:
Вывод:
ВАЖНО: дубликаты "organic" и "direct" были автоматически удалены.
Пример 2. Уникальные города, из которых поступили заказы. Аналогичная ситуация. Решили сначала объявить данные в виде списка:
Вывод:
4. Как проверить наличие элемента в множестве
Выше мы уже показали, что поскольку у множества нет индексов, обращаться к элементу через [i] нельзя. Зато множество отлично подходит для проверки «есть этот элемент или нет» — с помощью ключевого слова in.
Результат проверки сохраняется в переменную, которая принимает одно из двух значений: True (да, есть) или False (нет, отсутствует).
Пример 1. Проверяем, есть ли город Казань в наборе городов доставки:
Вывод:
Пример 2. Проверяем, есть ли артикул 9999 среди доступных товаров:
Вывод:
Пример 3. Проверяем, есть ли источник трафика «referral» в списке зафиксированных источников:
Вывод:
5. Операции над множествами — главная сила
Это то, чего нет у списков и кортежей. Множества
поддерживают математические операции: объединение, пересечение и
разность. Именно для этого они чаще всего и используются в анализе
данных.
Объединение — оператор |
Объединение возвращает все уникальные элементы из обоих множеств.
Вывод:
«Борис» встречался в обоих множествах, но в результате он один.
Пересечение — оператор &
Пересечение возвращает только те элементы, которые есть в обоих множествах одновременно.
Вывод:
Это список повторных покупателей — тех, кто купил и в январе, и в феврале.
Разность — оператор "-"
Разность возвращает элементы, которые есть в первом множестве, но отсутствуют во втором.
Вывод:
Это покупатели, которые были в январе, но не вернулись в феврале — ценная информация для маркетолога.
6. Как добавлять и удалять элементы множества
Множество можно изменять — добавлять и удалять элементы. Главное помнить: порядок при этом не гарантируется.
Добавить элемент — метод add()
Удалить элемент — метод discard()
Вывод:
💡 Используйте discard(), а не remove(), если не уверены, есть ли элемент в множестве. discard() просто ничего не сделает, если элемента нет, тогда как remove() выдаст ошибку.
Итог
Множество — это инструмент для работы с уникальными данными. Оно
автоматически убирает дубликаты, позволяет быстро проверить наличие
элемента и мощно справляется с задачами пересечения и разности наборов
данных. Если перед вами стоит вопрос «сколько уникальных значений?» или
«кто есть и там, и там?» — множество ваш лучший выбор. Следующая тема —
словари, где каждому значению можно дать имя.