Гид по технологиям

Как создать и использовать множества (set) в Python

4 min read Python Обновлено 08 Jan 2026
Множества (set) в Python: создание и операции
Множества (set) в Python: создание и операции

Рука держит книгу по обучению Python

Коротко о множестве: что это и когда применять

Множество — это неупорядоченная коллекция уникальных значений. Используйте set, когда вам нужно:

  • удалить дубликаты из последовательности;
  • быстро проверять принадлежность элемента (операции membership);
  • выполнять операции над наборами элементов (union, intersection и т. д.).

Важное замечание: множество само по себе изменяемо — вы можете добавлять и удалять элементы. Однако элементы множества должны быть хэшируемыми (immutable в смысле хэшируемости): числа, строки, кортежи и т.п. Нельзя поместить список или словарь как элемент множества.

Особенности множеств

  • Уникальность: дубликаты автоматически удаляются.
  • Неупорядоченность: у множеств нет индексов, порядок элементов не гарантирован.
  • Изменяемость структуры: методы add/remove/update позволяют менять состав множества.
  • Элементы должны быть хэшируемыми (hashable).

Факт-бокс:

  • Проверка принадлежности и добавление/удаление элементов в среднем выполняются за амортизированное O(1).
  • Операции объединения/пересечения/разности обычно выполняются за O(n + m), где n и m — размеры множеств.

Создание множества

Вы можете создать множество с помощью литерала в фигурных скобках или функции set().

# литерал
my_set = {1, 2, "MUO", "Google"}
print(my_set)
# возможный вывод: {1, 2, 'MUO', 'Google'}

# из списка
my_list = [1, 2, "MUO", "Google"]
my_set = set(my_list)
print(my_set)
# вывод: {1, 2, 'MUO', 'Google'}

# тип
print(type(my_set))
# вывод: 

Удаление дубликатов из последовательности

Преобразование списка в множество — простой способ убрать дубликаты. Учтите, что при этом порядок элементов теряется.

my_list = [1, 2, 2, "MUO", "MUO", "Google", "Google"]
my_set = set(my_list)
print(my_set)
# вывод: {1, 2, 'MUO', 'Google'}
print(len(my_set))
# вывод: 4

Если требуется сохранить исходный порядок при удалении дубликатов, используйте dict.fromkeys() или сохранение встреченных элементов в отдельном списке (см. раздел с альтернативами).

Преобразование словаря в множество ключей

При преобразовании словаря в set вы получите множество ключей (duplicates в литерале словаря перезаписываются в момент создания словаря — остается последний ключ с его значением):

my_dict = {
    "Mango": 2,
    "Orange": 2,
    "carrot": 2,
    "MUO": "web",
    "Google": "engine"
}
unique_keys = set(my_dict)
print("Уникальные ключи: {}".format(unique_keys))
# вывод: Уникальные ключи: {'Google', 'Mango', 'MUO', 'Orange', 'carrot'}

# итерация по множеству
for key in unique_keys:
    print(key)

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

Примеры с пояснениями и альтернативными синтаксисами.

Объединение (union): возвращает все элементы из обоих множеств.

setA = {1, 3, 5}
setB = {1, 4, 6}
newSet = setA.union(setB)
print(newSet)
# вывод: {1, 3, 4, 5, 6}

# альтернативный синтаксис
newSet2 = setA | setB
print(newSet2)

Разность (difference): элементы, которые есть в A, но нет в B.

setA = {1, 3, 5}
setB = {2, 4, 5}
print(setA.difference(setB))
# вывод: {1, 3}

# альтернативно: setA - setB

Симметрическая разность: элементы, присутствующие в одном из множеств, но не в обоих.

setA = {1, 3, 5}
setB = {2, 4, 5}
print(setA ^ setB)
# вывод: {1, 2, 3, 4}

# или
print(setA.symmetric_difference(setB))

Пересечение (intersection): общие элементы всех переданных множеств.

setA = {1, 3, 5}
setB = {1, 4, 6}
setC = {1, 5, 4}
newSet = setA.intersection(setB, setC)
print(newSet)
# вывод: {1}

Добавление и обновление:

setA = {1, 3, 5}
setA.add(7)           # добавляет одиночный элемент
print(setA)
# вывод: {1, 3, 5, 7}

# add принимает один аргумент; если нужно добавить несколько элементов, используйте update()
setA.update([8, 9])  # добавляет несколько элементов
print(setA)
# вывод: {1, 3, 5, 7, 8, 9}

Удаление элементов:

setA = {1, 3, 5}
setA.remove(5)        # KeyError, если элемента нет
print(setA)
# вывод: {1, 3}

setA.discard(10)      # безопасно, не бросит исключение
val = setA.pop()      # удаляет и возвращает произвольный элемент
print(val)

setA.clear()          # очищает множество
print(setA)
# вывод: set()

Проверки отношений между множествами:

setA = {1, 3, 5}
setB = {1, 4, 6}
print(setA.isdisjoint(setB))   # True, если пересечений нет
print(setA.issubset(setB))     # True, если setA полностью содержится в setB
print(setA.issuperset({1,3}))  # True, если setA содержит указанные элементы

Частые ошибки и случаи, когда множества не подходят

  • Нужен порядок или индексация: множества не предоставляют порядок и не поддерживают индексирование.
  • Нужны повторяющиеся элементы (multiset/multi-set): используйте collections.Counter.
  • Элементы не хэшируемы (списки, словари): их нельзя добавлять в set.

Пример неудачного варианта:

# Нельзя так — список не может быть элементом множества
s = set()
# s.add([1,2])  # TypeError: unhashable type: 'list'

Альтернативы и приемы (когда set не подходит)

  • Сохранить порядок при удалении дубликатов: list(dict.fromkeys(seq)) или сохранять встреченные элементы в списке/множине.
  • Мультисеты (счётчики): collections.Counter для подсчёта повторов.
  • Упорядоченное множество: в стандартной библиотеке нет OrderedSet; можно использовать dict.keys() (в Python 3.7+ порядок вставки сохраняется) или сторонние реализации.

Пример удаления дубликатов с сохранением порядка:

def unique_preserve_order(seq):
    seen = set()
    result = []
    for item in seq:
        if item not in seen:
            seen.add(item)
            result.append(item)
    return result

print(unique_preserve_order([3,1,2,3,2,1]))
# вывод: [3, 1, 2]

Чит‑шит: быстрые команды

  • Создать: my_set = {1,2} или set(iterable)
  • Проверка принадлежности: x in my_set
  • Добавить: my_set.add(x)
  • Удалить безопасно: my_set.discard(x)
  • Объединение: a | b или a.union(b)
  • Пересечение: a & b или a.intersection(b)
  • Разность: a - b или a.difference(b)
  • Симметрическая разность: a ^ b или a.symmetric_difference(b)

Ролевые чеклисты (кто и когда использует)

Разработчик:

  • Использовать set для быстрых проверок membership.
  • Не полагаться на порядок в set.
  • Использовать update() для добавления множества элементов.

Аналитик/Data Scientist:

  • Убирать дубликаты перед агрегацией (если порядок не важен).
  • Если нужен подсчёт — применять Counter, а не set.
  • Для уникальных ключей словаря конвертировать dict.keys() в set.

Ментальные модели и эвристики

  • Множество — это математическое множество: уникальные элементы без порядка.
  • Для частых membership‑проверок выбирайте set, для последовательной обработки с дубликатами — list.
  • Если нужно сохранить порядок и убрать дубликаты — используйте dict.fromkeys() или вспомогательный set для отсечения уже встреченных.

Примеры сложных сценариев и обходные пути

  1. Нужен набор кортежей, один из элементов — изменяемая структура: храните её в неизменяемом виде (например, сериализуйте или используйте tuple вместо list).

  2. Нужно атомарно объединять большие множества в многопоточном окружении: рассмотрите блокировки или работу с потокобезопасными структурами/очередями.

  3. Хранить данные с частыми вставками и удалениями и дополнительно сохранять порядок: комбинируйте deque/list и set (set для проверки, deque/list для порядка).

Краткое резюме

  • set в Python — удобный инструмент для удаления дубликатов и выполнения операций над наборами.
  • Множества изменяемы, но элементы должны быть хэшируемыми.
  • Для задач, где важен порядок или нужен подсчёт, лучше использовать альтернативы (dict.fromkeys, Counter и т.д.).

Примечание: пробуйте простые примеры в интерактивной консоли (REPL) — это самый быстрый способ понять поведение операций с множествами.

Словарь терминов (коротко)

  • set: коллекция уникальных элементов без порядка.
  • hashable/хэшируемый: объект, у которого есть неизменяемое значение хэша; такой объект можно использовать как элемент множества или ключ словаря.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство