Множества¶
Множество в python - "контейнер", содержащий не повторяющиеся элементы в случайном порядке.
Создание множеств¶
Создаём множества:
>>> a = set()
>>> a
set()
>>> a = set('hello')
>>> a
{'h', 'o', 'l', 'e'}
>>> a = {'a', 'b', 'c', 'd'}
>>> a
{'b', 'c', 'a', 'd'}
>>> a = {i ** 2 for i in range(10)} # генератор множеств
>>> a
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>> a = {} # А так нельзя!
>>> type(a)
<class 'dict'>
Как видно из примера, множества имеет тот же литерал, что и словарь, но пустое множество с помощью литерала создать нельзя.
Множества удобно использовать для удаления повторяющихся элементов:
>>> words = ['hello', 'daddy', 'hello', 'mum']
>>> set(words)
{'hello', 'daddy', 'mum'}
С множествами можно выполнять множество операций: находить объединение, пересечение...
len(s)
- число элементов в множестве (размер множества).x in s
- принадлежит лиx
множествуs
.set.isdisjoint(other)
- истина, еслиset
иother
не имеют общих элементов.set == other
- все элементыset
принадлежатother
, все элементыother
принадлежатset
.set.issubset(other)
илиset <= other
- все элементыset
принадлежатother
.set.issuperset(other)
илиset >= other
- аналогично.set.union(other, ...)
илиset | other | ...
- объединение нескольких множеств.set.intersection(other, ...)
илиset & other & ...
- пересечение.set.difference(other, ...)
илиset - other - ...
- множество из всех элементовset
, не принадлежащие ни одному изother
.set.symmetric_difference(other); set ^ other
- множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.set.copy()
- копия множества.
И операции, непосредственно изменяющие множество:
set.update(other, ...); set |= other | ...
- объединение.set.intersection_update(other, ...); set &= other & ...
- пересечение.set.difference_update(other, ...); set -= other | ...
- вычитание.set.symmetric_difference_update(other); set ^= other
- множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.set.add(elem)
- добавляет элемент в множество.set.remove(elem)
- удаляет элемент из множества.KeyError
, если такого элемента не существует.set.discard(elem)
- удаляет элемент, если он находится в множестве.set.pop()
- удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.set.clear()
- очистка множества.
frozenset¶
Единственное отличие set
от frozenset
заключается в том, что set
- изменяемый тип данных, а frozenset
- нет. Примерно похожая ситуация с списками и кортежами.
>>> a = set('qwerty')
>>> b = frozenset('qwerty')
>>> a == b
True
>>> True
True
>>> type(a - b)
<class 'set'>
>>> type(a | b)
<class 'set'>
>>> a.add(1)
>>> b.add(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'