Множества
Множества в Python - это неупорядоченный "мешок" уникальных элементов (неупорядоченный означает, что у любого элемента нет номера и обратиться к элементам по индексам мы не можем). Для создания множества используется фигурные скобки или функция set()
.
Класс set
, в некоторой степени, соответствует математическому множеству. Многие широко используемые математические операции, применимые к множествам, существуют и в Python. Часто вычисления, производимые над множествами, оказываются гораздо быстрее, чем альтернативные операции со списками.
Создание множества
my_set = {1, 2, 3}
print(my_set) # выведет {1, 2, 3}
Используя функцию set()
можно создать множество из итерируемых объектов (символов строки, массива).
Например:
s = "мама"
my_set = set(s)
print(my_set) # выведет {"м", "a"}
arr = [1, 2, 3, 2, 1]
my_set = set(arr)
print(my_set) # выведет {1, 2, 3}
Работа с элементами множеств
Узнать число элементов в множестве можно при помощи функции len
, как в случае с массивами и строками. Например, len(my_set)
.
Проверить, принадлежит ли элемент множеству можно при помощи операции in
, возвращающей значение типа bool
, то есть True
(истина) или False
(ложь). Эта операция на множестве работает за О(1), в то время когда в списках или строках она работает за О(n)
i in A
Аналогично есть противоположная операция not in
.
Добавление элемента в множество осуществляется методом add()
. Если элемент уже есть в множестве, то он не будет добавлен.
my_set = {1, 2, 3}
my_set.add(4)
my_set.add(3) # элемент уже есть, поэтому ничего не произойдет
print(my_set) # выведет {1, 2, 3, 4}
s = "мама"
my_set = set("папа") # my_set будет содержать следующие элементы {"п", "а"}
my_set.add(s)
print(my_set) # выведет {"п", "a", "мама"}
Удаление элемента из множества можно сделать методом discard()
или remove()
. Разница между этими методами заключается в том, что если элемента нет в множестве, то метод remove()
вызовет ошибку KeyError
, а метод discard()
просто ничего не сделает.
my_set = {1, 2, 3}
my_set.discard(2)
my_set.remove(3)
my_set.discard(4) # ничего не произойдет
# my_set.remove(4) вызовет ошибку KeyError
print(my_set) # выведет {1}
Из множества можно сделать список при помощи функции list
.
Сортировка множества
Элементы множества хранятся в неупорядоченном виде. Мы можем их отсортировать, но при этом результат сохранится в массив (список). Множества можно отсортировать только функцией sorted().
numbers = {25, 15, 7, 8, 19, 34, 52, 0, 12, 59, 91, 4}
print(sorted(numbers)) # [0, 4, 7, 8, 12, 15, 19, 25, 34, 52, 59, 91]
Перебор элементов множества
При помощи цикла for
можно перебрать все элементы множества:
Primes = {2, 3, 5, 7, 11}
for num im Primes:
print(num)
Операции над множествами в Python:
- Объединение множеств: оператор
|
или метод union()
- Пересечение множеств: оператор
&
или метод intersection()
- Разность множеств: оператор
-
или метод difference()
- Симметричная разность множеств: оператор
^
или метод symmetric_difference()
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 | set2) # выведет {1, 2, 3, 4}
print(set1.union(set2)) # выведет {1, 2, 3, 4}
print(set1 & set2) # выведет {2, 3}
print(set1.intersection(set2)) # выведет {2, 3}
print(set1 - set2) # выведет {1}
print(set1.difference(set2)) # выведет {1}
print(set1 ^ set2) # выведет {1, 4}
print(set1.symmetric_difference(set2)) # выведет {1, 4}
Множества в Python поддерживаются многими другими полезными методами. Приведем полный список в таблице ниже.
Операция
|
Описание |
A | B
A.union(B)
|
Возвращает множество, являющееся объединением множеств A и B |
A |= B
A.update(B)
|
Добавляет в множество A все элементы из множества B |
A & B
A.intersection(B)
|
Возвращает множество, являющееся пересечением множеств A и B |
A &= B
A.intersection_update(B)
|
Оставляет в множестве A только те элементы, которые есть в множестве B |
A - B
A.difference(B)
|
Возвращает разность множеств A и B (элементы, входящие в A, но не входящие в B) |
A -= B
A.difference_update(B)
|
Удаляет из множества A все элементы, входящие в множество B |
A ^ B
A.symmetric_difference(B)
|
Возвращает симметрическую разность множеств A и B (элементы, входящие в A или в B, но не в оба из них одновременно) |
A ^= B
A.symmetric_difference_update(B)
|
Записывает в A симметрическую разность множеств A и B |
A <= B
A.issubset(B)
|
Возвращает True, естли A является подмножеством B |
A >= B
A.issuperset(B)
|
Возвращает True, если A является надмножеством B |
A < B |
Эквивалентно A <= B and A != B |
A > B |
Эквивалентно A >= B and A != B |
При использовании формы A.update(B)
и аналогичных, параметр B
может также являться списком, строкой и вообще любым итерируемым объектом.
Так, запись A.update([1, 2, 1])
- корректна (в множество будут добавлены элементы 1 и 2), а запись A |= [1, 2, 1]
- приведет к ошибке.