Множества (set)

Хеширование в python - это процесс однозначного преобразования большого количества данных в целое число с помощью хэш-функции, это число можно использовать как индекс массиве (хэш-таблице). Для поиска элемента в таком массиве не нужно делать перебор элементов - достаточно вычислить хэш и мы уже знаем индекс элемента в массиве (хэш-таблице). Таким образом поиск объекта по такой таблице происходит быстро,что важно для высокопроизводительных алгоритмов и структур данных.

Неизменность - это идея, что объект не изменится после его создания, это позволяет сохранять одно и то же хэш-значение объекта.

Хэшируемые объекты характеризуются хешируемостью и неизменяемостью обладают методами:

  • __hash__() возвращает одно и то же численное значение на протяжении всего жизненного цикла объекта
  • __eq__() используется для операции сравнения
К хешируемым относят объекты встроенных неизменяемых типов: int, float, str, tuple, frozenset.


Множества - это неупорядоченная коллекция из нуля или более ссылок, указывающие на хэшируемые уникальные объекты. Относятся к категории изменяемых (mutable) объектов.

Свойства множеств:

  1. Элементы множества всегда уникальны, добавление повторяющихся элементов, не изменяет множество;
  2. Множествам неприменимо понятие индекса и операция извлечения среза т.к. они не упорядочены;
  3. Часто применяются для исключения повторяющихся значений или проверки на вхождение;
  4. Разнородность - элементом множества может быть любой объект;
  5. Произвольное число уровней вложенности;
  6. Поддержка функций len, max, min, hash.
Визуализация множества:
Создание
Пример создания множества:
a = {'a', 'b', (1,2,3), 0.5}
list_1 = [1,2,1,2]
b = set(list_1) # создание из списка
print('a =', a)
print('b =', b, 'дублирующиеся элементы удалены')
Методы и операции
Для множеств доступен ряд методов и перегруженных операций.

Пусть:
obj - любой хэшируемый объект;
s - множество;
t - любая перечисляемая коллекция (tuple, list, set, frozenset)
Операции возвращающие новое множество
Рассмотрим ряд примеров:
colors = {'white', 'blue', 'green'}
random = {1, 'white', 'pizza', 'blue', 'green', 2, False}
print('Объединение:', colors | random)
print('Пересечение:', colors & random)
print('Разница:', colors - random)
print('Симметрическая разница:', colors ^ random)