Объяснение к уроку
После этого урока ты сможешь:
Множество (set) хранит уникальные значения. Повторяющиеся записи сворачиваются в один элемент, поэтому множества удобны для тегов, прав доступа и поиска недостающих идентификаторов. У множеств нет фиксированных позиций элементов: никогда не полагайся на порядок обхода и не пытайся прочитать items[0] из множества.
Используй {value1, value2} для создания непустого множества и set() для создания пустого ({} создает пустой словарь). Метод add(value) вставляет одно значение. Метод discard(value) удаляет значение, если оно присутствует, и ничего не делает, если оно отсутствует; в отличие от remove(value), он не вызывает ошибку при отсутствии элемента.
Проверка принадлежности выполняется через value in items. Операции над множествами отвечают на важные вопросы: a | b объединяет все уникальные значения; a & b находит общие значения; a - b оставляет значения, присутствующие только в a. Эти операции возвращают новые множества, а не изменяют исходные.
Повторяющийся идентификатор учитывается как один элемент.
regions = {"us", "eu", "us"}
print(len(regions))
print("eu" in regions)Вывод:
2
TrueМетод discard() безопасен, даже если значение уже отсутствует.
roles = {"reader"}
roles.add("editor")
roles.discard("owner")
print(len(roles))
print("editor" in roles)Вывод:
2
TrueПересечение подсчитывает общие значения; объединение учитывает все элементы, присутствующие в любом из множеств.
online = {"api", "worker", "cache"}
monitored = {"cache", "mailer"}
print(len(online & monitored))
print(len(online | monitored))Вывод:
1
4Разность сохраняет значения, которые еще не были предоставлены.
required = {"read", "write", "deploy"}
granted = {"read", "deploy"}
print(len(required - granted))Вывод:
1| Потребность | Операция |
|---|---|
| Пустое множество | set() |
| Добавить одно значение | items.add(value) |
| Безопасно удалить | items.discard(value) |
| Проверить принадлежность | value in items |
| Объединить уникальные элементы | `a |
| Общие элементы | a & b |
| Элементы только слева | a - b |
{} — это пустой словарь, а не пустое множество.append() относится к спискам, а не к множествам.remove() вызывает KeyError при отсутствии элемента; используй discard(), когда отсутствие допустимо.a - b — это не то же самое, что b - a.