Множество — изменяемый, неупорядоченный тип данных в Python. Оно представляет собой последовательность элементов, разделённых запятыми и заключённых в фигурные скобки {}. Множество может быть неоднородным (содержать элементы разных типов), но элементы должны быть неизменяемыми объектами: числами, строками, кортежами. Списки, например, элементами множества быть не могут. Множество всегда содержит только уникальные элементы, дубликаты исключаются. В Python множества представлены типом set. В отличие от списков и кортежей, к элементам множества нельзя обратиться по индексу. Однако, все элементы множества можно перебрать в цикле.
Создание множеств
Существует несколько способов создать множество:
- Создание и заполнение множества: Переменной присваиваются фигурные скобки с перечисленными через запятую элементами. Например:
my_set = {"Hello", 45, 78.2}
print(my_set) # Вывод: {45, 'Hello', 78.2}
print(type(my_set)) # Вывод: <class 'set'>
- Пустое множество: Пустые фигурные скобки {} создают пустой словарь. Для создания пустого множества используется функция set():
empty_set = set()
print(empty_set) # Вывод: set()
print(type(empty_set)) # Вывод: <class 'set'>
Функция set() также преобразует другие типы данных в множества:
string_to_set = set("Hello")
print(string_to_set) # Вывод: {'H', 'e', 'l', 'o'}
- Создание множества с помощью генератора: Аналогично генераторам списков, но в фигурных скобках:
numbers_set = {i for i in range(1, 10)}
print(numbers_set) # Вывод: {1, 2, 3, 4, 5, 6, 7, 8, 9}
Операции с множествами
Добавление и удаление элементов
- add(): Добавляет элемент в множество. Поскольку множество неупорядочено, добавление не происходит «в конец».
my_set.add("World")
print(my_set)
- remove(): Удаляет элемент по значению. Возвращает ошибку, если элемента нет.
my_set.remove(45)
print(my_set)
- pop(): Удаляет случайный элемент. Не принимает аргументов.
my_set.pop()
print(my_set)
- discard(): Удаляет элемент по значению, но не возвращает ошибку, если элемента нет.
my_set.discard("NotExistingElement")
print(my_set)
Другие методы
- copy(): Создаёт копию множества.
my_set_copy = my_set.copy()
print(id(my_set), id(my_set_copy)) # разные id
- clear(): Очищает множество (удаляет все элементы).
my_set.clear()
print(my_set) # Вывод: set()
- len(): Возвращает количество элементов в множестве.
- max(), min(), sum(): Стандартные функции для нахождения максимального, минимального элемента и суммы элементов соответственно.
- in: Проверка наличия элемента в множестве.
Специальные операции с множествами
Для демонстрации создадим два множества:
set_a = {1, 2, 3}
set_b = {1, 5, 3, 4, 3, 4}
- Объединение: | или union(). Создаёт множество, содержащее все уникальные элементы обоих множеств.
union_result = set_a | set_b # или set_a.union(set_b)
print(union_result) # Вывод: {1, 2, 3, 4, 5}
- Пересечение: & или intersection(). Создаёт множество, содержащее только общие элементы.
intersection_result = set_a & set_b # или set_a.intersection(set_b)
print(intersection_result) # Вывод: {1, 3}
- Добавление элементов одного множества в другое: update() или |=.
set_a.update(set_b) # или set_a |= set_b
print(set_a) # Вывод: {1, 2, 3, 4, 5}
- Разность: — или difference(). Возвращает элементы первого множества, отсутствующие во втором.
difference_result = set_a - set_b # или set_a.difference(set_b)
print(difference_result) # Вывод: {2}
- Симметричная разность: ^ или symmetric_difference(). Возвращает элементы, присутствующие только в одном из множеств.
symmetric_difference_result = set_a ^ set_b # или set_a.symmetric_difference(set_b)
print(symmetric_difference_result) # Вывод: {2, 4, 5}
Подмножества и надмножества
- issubset(): Проверка, является ли одно множество подмножеством другого.
- issuperset(): Проверка, является ли одно множество надмножеством другого.
Неизменяемые множества (Frozen Set)
frozenset(): Создаёт неизменяемое множество. К нему нельзя добавлять или удалять элементы, но можно выполнять операции объединения, пересечения и т.д.
frozen_set = frozenset(set_a)
# frozen_set.add(10) # ошибка
Множества — эффективный инструмент в Python для работы с уникальными элементами и выполнения множественных операций. Они занимают больше памяти, чем списки, но работают быстрее. Неизменяемые множества полезны в ситуациях, где требуется гарантировать неизменность данных.