Перейти к содержанию

Наборы

Python оснащен несколькими встроенными типами данных, которые помогают нам организовать наши данные. Эти структуры включают списки (lists), словари (dictionaries), кортежи (tuples) и наборы (sets).

Читать про наборы: что, почему и как для более подробного ознакомления.

Инициализация набора

Существует два способа создания наборов: с помощью фигурных скобок {} и встроенной функции set()

Пустые наборы При создании набора не используйте пустые фигурные скобки {}, иначе вместо этого вы получите пустой словарь.

>>> s = {1, 2, 3}
>>> s = set([1, 2, 3])

>>> s = {}  # this will create a dictionary instead of a set
>>> type(s)
# <class 'dict'>

Неупорядоченные наборы уникальных элементов

Набор автоматически удаляет все повторяющиеся значения.

>>> s = {1, 2, 3, 2, 3, 4}
>>> s
# {1, 2, 3, 4}

И как неупорядоченный тип данных, они не могут быть проиндексированы.

>>> s = {1, 2, 3}
>>> s[0]
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: 'set' object does not support indexing

установить add() и update()

Используя метод add(), мы можем добавить один элемент в набор.

>>> s = {1, 2, 3}
>>> s.add(4)
>>> s
# {1, 2, 3, 4}

И с update(), несколько::

>>> s = {1, 2, 3}
>>> s.update([2, 3, 4, 5, 6])
>>> s
# {1, 2, 3, 4, 5, 6}

установить remove() и discard()

Оба метода удалят элемент из набора, но remove() вызовет ключевую ошибку key error, если значение не существует.

>>> s = {1, 2, 3}
>>> s.remove(3)
>>> s
# {1, 2}

>>> s.remove(3)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# KeyError: 3

discard() не вызовет никаких ошибок.

>>> s = {1, 2, 3}
>>> s.discard(3)
>>> s
# {1, 2}
>>> s.discard(3)

установить union()

union() или | создаст новый набор со всеми элементами из предоставленных наборов.

>>> s1 = {1, 2, 3}
>>> s2 = {3, 4, 5}
>>> s1.union(s2)  # or 's1 | s2'
# {1, 2, 3, 4, 5}

установить пересечение

intersection или & вернет набор только с элементами, которые являются общими для всех из них.

>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s3 = {3, 4, 5}
>>> s1.intersection(s2, s3)  # or 's1 & s2 & s3'
# {3}

установить разницу

difference или - вернет только те элементы, которые уникальны для первого набора (вызванного набора).

>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}

>>> s1.difference(s2)  # or 's1 - s2'
# {1}

>>> s2.difference(s1) # or 's2 - s1'
# {4}

установить symetric_difference

symetric_difference или ^ вернет все элементы, которые не являются общими между ними.

>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.symmetric_difference(s2)  # or 's1 ^ s2'
# {1, 4}