Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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))) |
Множество — одна из самых полезных структур данных для задач, требующих работы с уникальными элементами и быстрой проверкой принадлежности.