Python для начинающих: Урок 14 — Множества

Множество — изменяемый, неупорядоченный тип данных в 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 для работы с уникальными элементами и выполнения множественных операций. Они занимают больше памяти, чем списки, но работают быстрее. Неизменяемые множества полезны в ситуациях, где требуется гарантировать неизменность данных.

Что будем искать? Например,программа