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

Что такое множества в Python? Это контейнер, содержащий неповторяющиеся элементы. Этот тип данных похож на математическое множество.

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

Допустим, пользователь вводит числа до тех пор, пока не введёт пустую строку, нам же необходимо напечатать уникальные введённые числа (то есть если пользователь введёт одно и то же число дважды, то напечатать число необходимо только один раз).

1
2
3
4
5
6
7
8
9
numbers = set()

user_input = input()
while user_input:
    number = int(user_input)
    numbers.add(number)
    user_input = input()

print(numbers)
  1. numbers = set() - это создание пустого множества. set также можно задать литералом
test = {1, 2, 3, 4, 5}
Но только не пустое множество! Литерал test = {} создаст не множество, а словарь, о котором мы поговорим в следующей лекции.

6. numbers.add(number) - с помощью метода add множества мы добавляем элемент (почти как методом append в статье про списки). Отличие в том, что при попытке добавить элемент, который уже находится в множестве, ничего со множеством не произойдёт. В список же добавился бы ещё один такой же элемент.

Таким образом, numbers и содержит нужный в нашей задаче ответ.

Особенности set

  • Может содержать только неизменяемые элементы (числа, строки, кортежи - может; списки, другие множества - не может)
  • Порядок элементов не определён

Особенности связаны с тем, что внутри множества в Python реализованы хеш-таблицей. Если кратко, то от каждого элемента мы вычисляем хеш-функцию, и её значение - это индекс в каком-то большом заранее выделенном массиве.

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

Frozenset

frozenset - это неизменяемое множество. Создано по аналогии с парой список - кортеж, имеет те же самые особенности по сравнению с множеством, что и кортежи по сравнению со списками. Создаётся только с помощью функции frozenset(), своего литерала (как кортеж) не имеет.

frozenset может использоваться в качестве элементов set.

А больше сказать про него особо нечего.