Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

8.2. Методы и особенности множеств в Python

Оглавление урока

В уроке 8.1. мы кратко разобрались с множествами. В этом уроке поговорим об особенности множеств, как структуры данных, а так же об доступных методах.

Особенности множеств в Python

Как вы уже знали, чтобы создать множество, необходимо использовать фигурные скобки. Давайте попробуем создать пустое множество.

Пример
s = {}
print(type(s)) # => <class 'dict'>

Как видите, создать пустое множество с использованием фигурных скобок не получится, потому что словари создаются точно так же. Поэтому необходимо указывать явно при помощи функции set().

Пример
s = set()
print(type(s)) # => <class 'set'>

Следующее, что необходимо знать про множества – они являются неупорядоченной структурой и, поэтому вы не сможете обратиться к элементам множества по индексу. Это имеет свои плюсы, о которых будет написано далее.

Чтобы оставить в списке только уникальные элементы, можно его передать во множество:

Пример
s = set([1, 1, 2, 2, 3])
print(list(s)) # => [1, 2, 3]

Как было сказано ранее, получить доступ к конкретному элементу множества по индексу нельзя, но можно перебрать их все с помощью цикла for:

Пример
s = {1, 1, 2, 2, 3}
for item in s:
    print(item)

Так же вы можете проверить наличие элемента во множестве при помощи оператора in:

Пример
s = {1, 1, 2, 2, 3}
print(1 in s) # => True

Стоит заметить, что такая проверка выполняется очень быстро. Например, чтобы найти в неотсортированном массиве из n элементов какое-то значение, необходимо пройтись по всем элементам (в худшем случае):

Пример
m = [1, 2, 3, 4, 5]
sought = 5
for i in m:
    if (i == sought):
        pass

Такой алгоритм обладает линейной сложностью О(n), и с возрастанием числа элементов, сложность увеличивается. Да, кстати, в примере использовался оператор pass, о котором поговорим в уроке 10.3.

Не будем усложнять урок алгоритмами, о них будет отдельный раздел. Добавим только, что поиск элемента во множестве выполняется в среднем за O(1), так как множества основаны на хэш-таблицах.

Сложность алгоритма О(n) и О(1)
Сложность алгоритма О(n) и О(1)

Опять же, об алгоритмах, их сложности и обозначениях поговорим в отдельном разделе.

Последнее, что хотелось сказать об особенностях множеств, это элементы, которые можно в них добавлять. Элементами множеств в Python могут быть только хешируемые объекты, например: числа, строки, кортежи, если они состоят из хешируемых элементов и т.д. В свою очередь, списки и словари не могут быть элементами множества. В уроке 2.3. мы говорили про типы данных и их классификации. Далее пример использования списков в виде элементов множества:

Пример
a = [1, 2]
b = [2, 3]
s = {a, b}
print(s) # => TypeError: unhashable type: 'list'

Возникла ошибка, сообщающая о невозможности создания множества из списков из-за того, что тип list не является хешируемым.

Методы множеств в Python

Множества в Python имеют свои методы. Чтобы добавить элемент во множество, существует метод add().

Пример
s = {1, 1, 2, 2, 3}
s.add(3)
s.add(4)

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

Удалить элемент из множества можно двумя методами: remove() и discard(). Сейчас разберемся в их различии. Для начала удалим обоими методами элементы, которые находятся во множестве:

Пример
s = {1, 1, 2, 2, 3}
s.remove(1)
s.discard(2)
print(s) # => {3}

Как видите, разницы в удалении существующих элементов множества нет. Но что произойдет, если попытаться удалить несуществующий элемент:

Пример
s = {1, 1, 2, 2, 3}
s.discard(5)
print(s) # => {1, 2, 3}

Ничего не произошло. Совсем другая ситуация обстоит с методом remove():

Пример
s = {1, 1, 2, 2, 3}
s.remove(5)
print(s)

При выполнении кода возникло исключение KeyError:

Пример
Traceback (most recent call last):
  File "C:/set.py", line 2, in <module>
    s.remove(5)
KeyError: 5

Что такое исключения в Python, когда они возникают и как их перехватывать, вы узнаете в уроке 10.5.

Чтобы вернуть «случайный» элемент и удалить его из множества, используйте метод pop():

Пример
s = {1, 1, 2, 2, 3}

print(s.pop()) # => 1
print(s.pop()) # => 2
print(s.pop()) # => 3

Для очистки множества от элементов существует метод clear():

Пример
s = {1, 1, 2, 2, 3}
s.clear()
print(s) # => set()

В этом урок мы более подробно остановились на особенностях множеств и познакомились с несколькими методами множеств в Python.

<
×
>
Раздел «Знакомство с Python»
Урок 1.1. Первое знакомство с Python
Тест 1.2. Небольшой первый тест
Урок 1.3. Переменные и комментарии в Python
Тест 1.4. Тест по основным понятиям и работе с сайтом
Урок 2.1. Погружение в Python
Тест 2.2. Второй вводный тест по Python
Урок 2.3. Типы данных в Python
Урок 2.4. Форматирование строк в Python
Урок 2.5. Условная инструкция if-elif-else в Python
Урок 2.6. Преобразование и проверка типов в Python
Урок 2.7. Вызов методов цепочкой в Python
Урок 3.1. Первое знакомство с циклами в Python
Тест 3.2. Тест по циклам Python
Урок 4.1. Генерируем случайные числа на Python
Тест 4.2. Тест по модулю random Python
Урок 5.1. Структуры данных в Python
Тест 5.2. Тест по структурам Python
Урок 6.1. Списки в Python
Тест 6.2. Тест по спискам Python
Урок 6.3. Изменение списка на месте в Python
Урок 6.4. Дополнительно про списки в Python
Урок 6.5. Конкатенация и сортировка списков в Python
Тест 6.6. Заключительный тест по спискам в Python
Урок 7.1. Словари в Python
Тест 7.2. Тест по словарям Python
Урок 7.3. Словари и списки: еще глубже
Урок 7.4. Перебор элементов словаря в Python
Урок 7.5. Внутреннее устройство и сортировка словаря в Python
Урок 7.6. Методы словарей и функция len() в Python
Тест 7.7. Заключительный тест по словарям
Урок 8.1. Множества в Python
Урок 8.2. Методы и особенности множеств в Python
Вы здесь
Урок 8.3. Отношения между множествами и операции над ними
Тест 8.4. Тест по методам множеств в Python
Тест 8.5. Тест по операциям над множествами в Python
Урок 9.1. Кортежи в Python
Урок 9.2. Более подробно о кортежах в Python
Тест 9.3. Тест по кортежам в Python
Урок 10.1. Контроль хода выполнения программы в Python
Урок 10.2. Цикл while в Python
Урок 10.3. Операторы break, continue и pass в Python
Урок 10.4. Циклы for/else и while/else в Python
Урок 10.5. Обработка исключений (try/except) в Python
Тест 10.6. Тест по циклам и управляющим конструкциям
Тест 10.7. Тест по обработке исключений
Урок 10.8. Что дальше?