Ответ
Множество (Set) в Python — это встроенная изменяемая коллекция уникальных и хешируемых объектов, не имеющая порядка (неиндексируемая). Реализована на основе хеш-таблицы, что обеспечивает очень быструю (в среднем O(1)) проверку вхождения элемента (in).
Ключевые свойства и операции:
-
Создание:
my_set = {1, 2, 3} # Использование фигурных скобок empty_set = set() # Пустое множество. {} — создаст словарь! from_list = set([1, 2, 2, 3]) # {1, 2, 3} — дубликаты удаляются -
Основные операции (модифицируют исходное множество):
s = {1, 2, 3} s.add(4) # {1, 2, 3, 4} s.remove(2) # {1, 3, 4}. KeyError, если элемента нет s.discard(10) # {1, 3, 4}. Удаляет, если есть (без ошибки) popped = s.pop() # Удаляет и возвращает случайный элемент (т.к. порядка нет) s.clear() # set() -
Теоретико-множественные операции:
a = {1, 2, 3, 4} b = {3, 4, 5, 6} union = a | b # {1, 2, 3, 4, 5, 6} (объединение) intersection = a & b # {3, 4} (пересечение) difference = a - b # {1, 2} (разность: элементы в a, но не в b) sym_diff = a ^ b # {1, 2, 5, 6} (симметрическая разность) # Есть также методы, не создающие новый объект: a.update(b) # a |= b. Добавляет в 'a' все элементы из 'b' a.intersection_update(b)# a &= b. Оставляет в 'a' только общие элементы -
Проверки:
a = {1, 2} b = {1, 2, 3} print(a <= b) # True. a является подмножеством b (issubset) print(b >= a) # True. b является надмножеством a (issuperset) print(a.isdisjoint({5, 6})) # True. Множества не пересекаются
Типичные сценарии использования:
- Удаление дубликатов из списка:
unique_list = list(set(duplicate_list))(порядок может быть потерян). - Проверка членства: Гораздо быстрее, чем
element in list, особенно для больших коллекций. - Нахождение общих/уникальных элементов: Например, общие теги у двух статей (
tags1 & tags2). - Моделирование математических множеств.
Важное ограничение: Элементами множества могут быть только хешируемые (неизменяемые) типы: числа, строки, кортежи (из хешируемых элементов). Списки, словари и другие множества — нельзя.