← Назад к вопросам

Что такое множества (set) в Python?

1.0 Junior🔥 241 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Множества (Set) в Python

Множество (set) — это неупорядоченная коллекция уникальных элементов. Это математическое множество, реализованное в Python.

Основные характеристики

# Создание множества
my_set = {1, 2, 3, 4, 5}
empty_set = set()  # Не {}! {} — это пустой dict

# Множество содержит только уникальные элементы
duplicates = {1, 1, 2, 2, 3}  # {1, 2, 3}

# Элементы неупорядочены
print({3, 1, 2})  # Порядок может отличаться

# Множество изменяемо, но элементы должны быть неизменяемы
my_set.add(6)
my_set.remove(1)
# my_set.add([1, 2])  # TypeError: unhashable type

Операции с множествами

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# Объединение (union)
print(a | b)        # {1, 2, 3, 4, 5, 6}
print(a.union(b))

# Пересечение (intersection)
print(a & b)        # {3, 4}
print(a.intersection(b))

# Разность (difference)
print(a - b)        # {1, 2}
print(a.difference(b))

# Симметричная разность (symmetric difference)
print(a ^ b)        # {1, 2, 5, 6}
print(a.symmetric_difference(b))

# Проверка подмножества
print({1, 2}.issubset(a))      # True
print(a.issubset({1, 2, 3, 4, 5})  # True

# Проверка надмножества
print(a.issuperset({1, 2}))    # True

Методы множеств

my_set = {1, 2, 3}

# Добавление элемента
my_set.add(4)  # {1, 2, 3, 4}

# Удаление элемента
my_set.remove(1)  # KeyError если элемента нет
my_set.discard(1)  # Безопасное удаление

# Удаление и возврат случайного элемента
elem = my_set.pop()

# Очистка множества
my_set.clear()  # set()

# Копирование
copy_set = my_set.copy()

Практические применения

1. Удаление дубликатов

numbers = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(numbers))  # [1, 2, 3, 4]

2. Быстрая проверка принадлежности

# Список — O(n)
allowed_list = [1, 2, 3, 4, 5]
if 3 in allowed_list:  # Медленно
    pass

# Множество — O(1)
allowed_set = {1, 2, 3, 4, 5}
if 3 in allowed_set:  # Быстро!
    pass

3. Пересечение списков

users_a = [1, 2, 3, 4]
users_b = [3, 4, 5, 6]

common = list(set(users_a) & set(users_b))  # [3, 4]

4. Поиск уникальных элементов

text = "hello world"
unique_chars = set(text)  # {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}
print(len(unique_chars))

Frozenset — неизменяемое множество

# Обычное множество — изменяемо
mutable_set = {1, 2, 3}
mutable_set.add(4)  # OK

# Frozenset — неизменяемо
frozen = frozenset({1, 2, 3})
# frozen.add(4)  # AttributeError

# Можно использовать как ключ dict
dict_with_set_keys = {frozenset([1, 2]): "value"}

Производительность

import timeit

# Set очень быстр для проверки принадлежности
print(timeit.timeit("3 in {1, 2, 3, 4, 5}", number=1000000))
print(timeit.timeit("3 in [1, 2, 3, 4, 5]", number=1000000))

Итог

Используй множества для:

  • Удаления дубликатов
  • Быстрой проверки принадлежности
  • Математических операций (объединение, пересечение)
  • Когда порядок элементов не важен