Множество: создание и проверка принадлежности
Уроки курсаМножество: создание и проверка принадлежности
Проверка принадлежности оператором in и получение уникальных элементов из списка
Два самых частых сценария работы с множеством — проверить, есть ли что-то внутри, и убрать дубликаты из списка. Оба делаются в одну строку.
Оператор in
Для множества in работает так же, как для списка: возвращает True или False. Синтаксис одинаковый, но есть практическое преимущество: множество устроено иначе внутри — детали этого изучают позже, но на практике это означает значительно более быструю проверку, чем у списка, даже при большом числе элементов.
Пример с городами:
visited = {"Москва", "Питер", "Казань"}
print("Москва" in visited) # True
print("Новосибирск" in visited) # False
print("Питер" not in visited) # False
Это удобно в условиях. Например, чтобы не добавлять пользователя в рассылку дважды:
subscribed = {"alice@mail.ru", "bob@mail.ru"}
user = "carol@mail.ru"
if user not in subscribed:
subscribed.add(user)
print(f"{user} добавлен в рассылку")
else:
print(f"{user} уже подписан")
Здесь in и add() работают вместе: проверяем членство — добавляем только тех, кого ещё нет.
Паттерн set(список) для дедупликации
Если есть список с повторами и нужны только уникальные значения — конвертируй его в множество:
cities = ["Москва", "Питер", "Москва", "Казань", "Питер", "Казань"]
unique_cities = set(cities)
print(unique_cities) # {'Москва', 'Питер', 'Казань'} — порядок произвольный
Если после дедупликации нужен список (например, чтобы отсортировать или передать в функцию, которая ждёт именно список):
unique_sorted = sorted(set(cities))
print(unique_sorted) # ['Казань', 'Москва', 'Питер']
sorted() принимает любую коллекцию, поэтому его можно применить прямо к множеству — результат будет списком, отсортированным по алфавиту.
Полный мини-сценарий: собираем теги из нескольких источников, убираем дубликаты и проверяем, есть ли нужный тег:
raw_tags = ["python", "data", "python", "ml", "data", "python"]
tags = set(raw_tags)
print(tags) # {'python', 'data', 'ml'}
print("ml" in tags) # True
print("deep" in tags) # False
Один вызов set() — и список из шести элементов превращается в три уникальных. После этого in позволяет быстро проверить наличие любого тега.
