В этой статье я разбираю Множества в Python 3. Вы узнаете, какими свойствами обладают множества и как можно с ними работать.
Свойства множеств
Я уже писал про последовательности и множества в Python 3. Множество — это неупорядоченная совокупность объектов, в которой не может быть дубликатов. Множество можно изменять, добавляя и удаляя из него объекты.
Объявить множество можно с помощью фигурных скобок, но в отличии от словарей не нужно указывать ключи. Создание множества и получение некоторых свойств множества показаны ниже:
### Код my_set = {1, 2, 3, 4, 5} # создание множества print(type(my_set)) # тип print(len(my_set)) # длина print(my_set) ### Исполнение <class 'set'> 5 {1, 2, 3, 4, 5}
Так как множество не упорядочены, то: обращение по индексу, срезы, конкатенация и повторение — здесь не работают.
Множества часто используются для двух целей:
- для удаления дубликатов;
- для проверки, входит ли элемент в множество (поиск в множестве занимает очень мало времени даже для очень больших множеств).
Работа с множествами
Добавить элемент в множество можно с помощью метода add():
### Код my_set = {1, 2, 3, 4, 5} my_set.add(6) print(my_set) ### Исполнение {1, 2, 3, 4, 5, 6}
Можно одно множество соединить с другим с помощью метода update():
### Код my_set1 = {1, 2, 3, 4, 5} my_set2 = {3, 4, 5, 6, 7} my_set1.update(my_set2) print(my_set1) ### Исполнение {1, 2, 3, 4, 5, 6, 7}
Метод update() может принять любой список:
### Код my_set = {1, 2, 3, 4, 5} my_set.update([7, 5, 3, 6, 2]) print(my_set) ### Исполнение {1, 2, 3, 4, 5, 6, 7}
Как можно заметить из результата выполнения кода, повторяющиеся значения, добавляемые в множество, игнорируются.
Удаление элемента из множества можно выполнить с помощью методов remove() и discard(). При этом, если удалять несуществующий элемент:
- с помощью remove() — то приложение выдаст ошибку,
- с помощью discard() — приложение ничего не удалит, но и ошибки не будет.
### Код my_set = {1, 2, 3, 4, 5} my_set.remove(1) my_set.discard(3) print(my_set) ### Исполнение {2, 4, 5} ### Код (удаление несуществующего элемента методом remove()) my_set = {1, 2, 3, 4, 5} my_set.remove(6) print(my_set) print("Конец!") # Сюда выполнение кода не дойдёт ### Исполнение Traceback (most recent call last): File "test2.py", line 2, in <module> my_set.remove(6) KeyError: 6 ### Код (удаление несуществующего элемента методом discard()) my_set = {1, 2, 3, 4, 5} my_set.discard(6) print(my_set) print("Конец!") # Сюда выполнение кода дойдёт ### Исполнение {1, 2, 3, 4, 5} Конец!
Некоторые специфичные операции над множествами продемонстрированы на следующем рисунке:
Эти же операции в виде кода:
# Множества my_set1 = {1, 5, 9, 6, 4} my_set2 = {6, 5, 1, 8, 2} # Пересечение print(my_set1 & my_set2) # {1, 5, 6} # Объединение print(my_set1 | my_set2) # {1, 2, 4, 5, 6, 8, 9} # Симметричная разница print(my_set1 ^ my_set2) # {2, 4, 8, 9} # Разница print(my_set1 - my_set2) # {9, 4} print(my_set2 - my_set1) # {8, 2}
Проверка на то, входит ли элемент в множество, осуществляется с помощью оператора in:
my_set = {15, 85, 12, 55, 95, 87, 33} print(95 in my_set) # True print(11 in my_set) # False
Так как множества должны вычислять хеш-код для каждого элемента, в них могут храниться только хешируемые элементы. В языке Python изменяемые элементы (список, словарь) не являются хешируемыми. То есть, такое множество нельзя создать:
my_set = {[1, 2, 3], ["один", "два"]}
А такое можно:
my_set = {(1, 2, 3), ("один", "два")}
Итог
В этой статье я немного рассказал про множества (set) в Python 3. Дополнительно, про некоторые особенности множеств можете почитать в официальной документации.