0 знаков
28. Методы и особенности множеств в Python
Кратко- Множества в Python создаются с использованием фигурных скобок или функции
set()
.- Множества являются неупорядоченной структурой данных.
- Чтобы оставить в списке только уникальные элементы, достаточно сделать их него множество с помощью функции
set()
.- Поиск элемента во множестве выполняется быстро благодаря хеш-таблицам.
- Элементы множеств в Python должны быть хешируемыми объектами (числа, строки, кортежи).
- Методы множеств в Python:
add()
,remove()
,discard()
,pop()
иclear()
.
В предыдущем уроке мы кратко разобрались со множествами. В этом уроке поговорим об особенности множеств, как структуры данных, а так же о доступных методах.
Особенности множеств в 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
, о котором поговорим в дальнейших уроках.
Не будем усложнять урок алгоритмами. Добавим только, что поиск элемента во множестве выполняется в среднем за O(1)
, так как множества основаны на хэш-таблицах.
Для доступа необходимо авторизоваться на сайте Codebra.
Опять же, об алгоритмах, их сложности и обозначениях поговорим в отдельном разделе.
Последнее, что хотелось сказать об особенностях множеств, это элементы, которые можно в них добавлять. Элементами множеств в Python могут быть только хешируемые объекты, например: числа, строки, кортежи, если они состоят из хешируемых элементов и т.д. В свою очередь, списки и словари не могут быть элементами множества. В предыдущих уроках мы говорили про типы данных и их классификации. Далее пример использования списков в виде элементов множества:
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, когда они возникают и как их перехватывать вы узнаете далее.
Чтобы вернуть «случайный» элемент и удалить его из множества, используйте метод 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. В следующем уроке подробно поговорим об отношениях между множествами и операциях над ними.
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ