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

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

Например, если нужно хранить информацию об ID студентов, множество подходит, поскольку ID не дублируются.

Элементы множества Python

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

В Python мы создаём множества, помещая все элементы в фигурные скобки {}, разделённые запятыми.

Множество может содержать любое количество элементов разных типов (целые, вещественные, кортежи, строки и т.д.). Но множество не может содержать изменяемые элементы — списки, множества или словари.

Пример:

# создаём множество целых чисел
student_id = {112, 114, 116, 118, 115}
print('Student ID:', student_id)

# создаём множество строк
vowel_letters = {'a', 'e', 'i', 'o', 'u'}
print('Vowel Letters:', vowel_letters)

# создаём множество смешанных типов
mixed_set = {'Hello', 101, -2, 'Bye'}
print('Set of mixed data types:', mixed_set)

Вывод

Student ID: {112, 114, 115, 116, 118}
Vowel Letters: {'u', 'a', 'e', 'i', 'o'}
Set of mixed data types: {'Hello', 'Bye', 101, -2}

В примере выше мы создали разные типы множеств, помещая элементы в фигурные скобки {}.

Примечание

При запуске этого кода порядок вывода может отличаться. Это потому, что множество не имеет определённого порядка.


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

Создать пустое множество немного сложно. Пустые фигурные скобки {} создадут пустой словарь.

Чтобы создать множество без элементов, мы используем функцию set() без аргументов. Например:

# создаём пустое множество
empty_set = set()

# создаём пустой словарь
empty_dictionary = { }

# проверяем тип empty_set
print('Data type of empty_set:', type(empty_set))

# проверяем тип empty_dictionary
print('Data type of empty_dictionary:', type(empty_dictionary))

Вывод

Data type of empty_set: <class 'set'>
Data type of empty_dictionary: <class 'dict'>

Здесь:

  • empty_set — пустое множество, созданное через set()

  • empty_dictionary — пустой словарь, созданный через {}

Мы использовали функцию type(), чтобы узнать, к какому классу относятся empty_set и empty_dictionary.


Дубликаты в множестве

Посмотрим, что произойдёт при попытке включить дубликаты:

numbers = {2, 4, 6, 6, 2, 8}
print(numbers)   # {8, 2, 4, 6}

Мы видим, что в множестве нет дубликатов, поскольку множество не может их содержать.


Добавление и обновление элементов

Множества изменяемы. Однако, поскольку они неупорядоченные, индексация не имеет смысла.

Мы не можем получить доступ к элементу множества или изменить его через индексацию или срез. Тип set не поддерживает это.

Добавление элемента

В Python мы используем метод add() для добавления элемента. Например:

numbers = {21, 34, 54, 12}

print('Initial Set:',numbers)

# используем метод add()
numbers.add(32)

print('Updated Set:', numbers)

Вывод

Initial Set: {34, 12, 21, 54}
Updated Set: {32, 34, 12, 21, 54}

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

Метод update() используется для обновления множества элементами других коллекций (списков, кортежей, множеств).

companies = {'Lacoste', 'Ralph Lauren'}
tech_companies = ['apple', 'google', 'apple']

# используем метод update()
companies.update(tech_companies)

print(companies)

# Вывод: {'google', 'apple', 'Lacoste', 'Ralph Lauren'}

Все уникальные элементы tech_companies добавлены в companies.


Удаление элемента из множества

Используем метод discard() для удаления указанного элемента:

languages = {'Swift', 'Java', 'Python'}

print('Initial Set:',languages)

# удаляем 'Java' из множества
removedValue = languages.discard('Java')

print('Set after remove():', languages)

Вывод

Initial Set: {'Python', 'Swift', 'Java'}
Set after remove(): {'Python', 'Swift'}

Встроенные функции для множеств

Популярные встроенные функции:

Функция

Описание

all()

Возвращает True, если все элементы истинны (или множество пусто).

any()

Возвращает True, если любой элемент истинен. Если множество пусто — False.

enumerate()

Возвращает объект enumerate, содержащий индексы и значения.

len()

Возвращает количество элементов.

max()

Возвращает наибольший элемент.

min()

Возвращает наименьший элемент.

sorted()

Возвращает новый отсортированный список (не сортирует само множество).

sum()

Возвращает сумму всех элементов.


Итерация по множеству

fruits = {"Apple", "Peach", "Mango"}

# цикл for для доступа к каждому фрукту
for fruit in fruits:
    print(fruit)

Вывод

Mango
Peach
Apple

Количество элементов

Используем метод len() для определения количества элементов:

even_numbers = {2,4,6,8}
print('Set:',even_numbers)

# находим количество элементов
print('Total Elements:', len(even_numbers))

Вывод

Set: {8, 2, 4, 6}
Total Elements: 4

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

Python предоставляет методы для математических операций: объединение, пересечение, разность, симметрическая разность.

Объединение двух множеств

Объединение множеств A и B включает все элементы обоих множеств.

Объединение множеств в Python

Используем оператор | или метод union():

# первое множество
A = {1, 3, 5}

# второе множество
B = {0, 2, 4}

# объединение через |
print('Union using |:', A | B)

# объединение через union()
print('Union using union():', A.union(B))

Вывод

Union using |: {0, 1, 2, 3, 4, 5}
Union using union(): {0, 1, 2, 3, 4, 5}

Примечание

A|B и union() эквивалентны операции A ⋃ B.


Пересечение множеств

Пересечение множеств A и B включает общие элементы.

Пересечение множеств в Python

Используем оператор & или метод intersection():

# первое множество
A = {1, 3, 5}

# второе множество
B = {1, 2, 3}

# пересечение через &
print('Intersection using &:', A & B)

# пересечение через intersection()
print('Intersection using intersection():', A.intersection(B))

Вывод

Intersection using &: {1, 3}
Intersection using intersection(): {1, 3}

Примечание

A&B и intersection() эквивалентны операции A ⋂ B.


Разность множеств

Разность множеств A и B содержит элементы A, отсутствующие в B.

Разность множеств в Python

Используем оператор - или метод difference():

# первое множество
A = {2, 3, 5}

# второе множество
B = {1, 2, 6}

# разность через -
print('Difference using &:', A - B)

# разность через difference()
print('Difference using difference():', A.difference(B))

Вывод

Difference using &: {3, 5}
Difference using difference(): {3, 5}

Симметрическая разность

Симметрическая разность множеств A и B включает все элементы A и B, исключая общие.

Симметрическая разность множеств в Python

Используем оператор ^ или метод symmetric_difference():

# первое множество
A = {2, 3, 5}

# второе множество
B = {1, 2, 6}

# симметрическая разность через ^
print('using ^:', A ^ B)

# через symmetric_difference()
print('using symmetric_difference():', A.symmetric_difference(B))

Вывод

using ^: {1, 3, 5, 6}
using symmetric_difference(): {1, 3, 5, 6}

Проверка равенства множеств

Используем оператор ==:

# первое множество
A = {1, 3, 5}

# второе множество
B = {3, 5, 1}

if A == B:
    print('Set A and Set B are equal')
else:
    print('Set A and Set B are not equal')

Вывод

Set A and Set B are equal

В примере A и B имеют одинаковые элементы, поэтому условие истинно.


Другие методы множеств

Метод

Описание

add()

Добавляет элемент в множество.

clear()

Удаляет все элементы.

copy()

Возвращает копию множества.

difference()

Возвращает разность как новое множество.

difference_update()

Удаляет элементы другого множества из текущего.

discard()

Удаляет элемент, если он есть (не выбрасывает исключение).

intersection()

Возвращает пересечение как новое множество.

intersection_update()

Обновляет множество пересечением.

isdisjoint()

True, если множества не пересекаются.

issubset()

True, если другое множество содержит текущее.

issuperset()

True, если текущее содержит другое.

pop()

Удаляет и возвращает произвольный элемент. KeyError, если пусто.

remove()

Удаляет элемент. KeyError, если элемента нет.

symmetric_difference()

Возвращает симметрическую разность.

symmetric_difference_update()

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

union()

Возвращает объединение.

update()

Обновляет множество объединением.