Множества (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) |
- numbers = set() - это создание пустого множества. set также можно задать литералом
test = {1, 2, 3, 4, 5}
6. numbers.add(number) - с помощью метода add множества мы добавляем элемент (почти как методом append в статье про списки). Отличие в том, что при попытке добавить элемент, который уже находится в множестве, ничего со множеством не произойдёт. В список же добавился бы ещё один такой же элемент.
Таким образом, numbers и содержит нужный в нашей задаче ответ.
Особенности set
- Может содержать только неизменяемые элементы (числа, строки, кортежи - может; списки, другие множества - не может)
- Порядок элементов не определён
Особенности связаны с тем, что внутри множества в Python реализованы хеш-таблицей. Если кратко, то от каждого элемента мы вычисляем хеш-функцию, и её значение - это индекс в каком-то большом заранее выделенном массиве.
Отсюда также следует, что для поиска элемента в большом массиве выгоднее (по скорости) использовать множества, а не списки.
Frozenset
frozenset - это неизменяемое множество. Создано по аналогии с парой список - кортеж, имеет те же самые особенности по сравнению с множеством, что и кортежи по сравнению со списками. Создаётся только с помощью функции frozenset(), своего литерала (как кортеж) не имеет.
frozenset может использоваться в качестве элементов set.
А больше сказать про него особо нечего.