hashable
объектов. Обычно множества используются в тестировании вхождения элемента, удаление дубликатов из последовательности и вычисление математических операций, таких как пересечение, объединение, разность и т. д.x in set
, len(set)
и for x in set
. Будучи неупорядоченной коллекцией, множества не записывают положение элемента или порядок вставки. Соответственно, не поддерживают индексацию, нарезку или другое поведение, подобное упорядоченной последовательности.set
и frozenset
:set
является ИЗМЕНЯЕМЫМ множеством, содержимое может быть изменено с помощью таких методов, как set.add()
и set.remove()
, также поддерживает операции доступные frozenset
. Поскольку тип set
является изменяемым, он не имеет хеш-значения и не может использоваться ни как ключ словаря, ни как элемент другого множества. frozenset
является НЕизменяемым и хешируемым множеством, его содержимое не может быть изменено после его создания, поэтому он может использоваться как ключ словаря или как элемент другого множества. Дополнительно смотрите операции доступные frozenset
set
и frozenset
:set
с frozenset
, возвращают тип первого операнда. Например: frozenset('ab') | set('bc')
возвращает тип frozenset
.set
и frozenset
поддерживают операции сравнения. Тип set
сравниваются с типом frozenset
на основе их членов. Например: set('abc') == frozenset('abc') # True set('abc') in set([frozenset('abc')]) # True
False
: a<b
, a==b
или a>b
.set()
и frozenset()
. set
и frozenset
:set()
можно создавать как пустые изменяемые множества так и выполнять преобразования последовательностей хешируемых объектов в изменяемые множества.frozenset()
можно создавать как пустые неизменяемые множества так и выполнять преобразования последовательностей хешируемых объектов в неизменяемые множества.set()
и frozenset()
удаляются дубликаты элементов последовательности.set
(не frozenset
) можно еще создать, поместив разделенную запятыми последовательность в фигурные скобки, например: s = {'jack', 'sjoerd'}
.set
в Python.set()
и frozenset()
, некоторые операции с изменяемыми множествами:# Чтобы создать пустое множество необходимо # использовать `set()`, а не `{}`, т.к. пустые фигурные # скобки создадут пустой [словарь][t-dict]. # Создание пустых множеств >>> set() # set() >>> frozenset() # frozenset() # Создание непустых изменяемых множеств >>> s = {'a', 'b', 'c', 'd'} >>> s # {'a', 'b', 'c', 'd'} # При преобразовании последовательности в # множество удаляются дубликаты элементов line = 'abracadabra' >>> a = set(line) >>> a # {'a', 'r', 'd', 'c', 'b'} lst = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'] >>> b = set(lst) >>> b # {'a', 'b', 'c', 'd'} # Добавление элемента к изменяемому множеству >>> a.add(10) # {'a', 10, 'r', 'd', 'c', 'b'} # Удаление элемента из изменяемого множества # происходит по его значению >>> a.remove('r') >>> a # {'a', 10, 'd', 'c', 'b'} # Метод `.pop()` извлекает и удаляет случайный элемент # изменяемого множества >>> a.pop() # 'a' # НЕИЗМЕНЯЕМОЕ МНОЖЕСТВО >>> lst = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4] >>> s = frozenset(lst) >>> s # frozenset({0, 1, 2, 3, 4}) # пробуем удалить элемент >>> s.remove(1) # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # AttributeError: 'frozenset' object has no attribute 'remove'