- Множества в Python
- Как создать множество
- Как изменять множество
- Как удалять элементы из множества
- Операции со множествами
- Объединение
- Пересечение
- Разность
- Симметрическая разность
- Методы множеств
- Несколько операций со множествами
- Проверка на вхождение
- Итерирование по множеству
- Встроенные функции множеств
- Frozenset
Множества в Python
Множество — неупорядоченный набор элементов. Каждый элемент в множестве уникален (т. е. повторяющихся элементов нет) и неизменяем.
Само по себе множество можно изменять, то есть удалять или добавлять элементы.
Множества удобно использовать для выполнения математических операций: объединение, пересечение, симметрическая разность и т. д.
Как создать множество
Множество объявляется так: элементы помещаются в фигурные скобки <> и разделяются запятыми. Сделать это можно и с помощью встроенной функции set() .
Внутри множества может быть любое количество элементов любого типа (целые числа, числа с плавающей точкой, кортежи, строки и т. д.). Внутрь множества нельзя помещать элементы изменяемых типов: списки, другие множества или словари.
# Разные виды множеств # Множество с целыми числами my_set = print(my_set) # Множество с разными типами данных my_set = print(my_set)
# Внутри множества не может быть одинаковых элементов # Вывод: my_set = print(my_set) # Аргументом функции set() может быть список # Вывод: my_set = set([1, 2, 3, 2]) print(my_set) # Внутри множества не может быть изменяемых объектов # В этом множестве [3, 4] — изменяемый список # Поэтому следующая строка вызовет ошибку my_set =
Traceback (most recent call last):
File "", line 15, in
my_set =
TypeError: unhashable type: 'list'
Создание пустого множество — дело хитрое.
Пустые фигурные скобки <> — это словарь. Чтобы объявить пустое множество, нужно использовать функцию set() без аргументов.
# Обратим внимание на объявление пустого множества # Объявление с помощью <> a = <> # Проверка типа a print(type(a)) # Объявление с помощью set() a = set() # Проверка типа a print(type(a))
Как изменять множество
Множества изменяемы и не упорядочены. Поэтому в индексации нет никакого смысла.
Так что получить доступ к элементам с помощью индексов или срезов не получится. Множества просто не поддерживают эти операции.
Чтобы добавить один элемент, нужно использовать метод add() . Если нужно добавить несколько элементов — метод update() . Метод update() принимает в качестве аргументов кортежи, списки или другие множества. Во всех случаях следует избегать одинаковых элементов.
# создаем my_set my_set = print(my_set) # вызов my_set[0] приведет к ошибке # TypeError: 'set' object does not support indexing # добавляем элемент # Вывод: my_set.add(2) print(my_set) # добавляем несколько элементов # Вывод: my_set.update([2, 3, 4]) print(my_set) # добавляем список и множество # Вывод: my_set.update([4, 5], ) print(my_set)
Как удалять элементы из множества
Определенный элемент множества можно удалить с помощью методов discard() и remove() .
Разница между ними вот в чем. Если элемент, который вы хотите удалить с помощью discard() , отсутствует в множестве — оно не изменится. А вот remove() вызовет ошибку, если элемента нет в множестве.
# разница между discard() и remove() # создаем my_set my_set = print(my_set) # удаление элемента # с помощью discard # Вывод: my_set.discard(4) print(my_set) # удаление элемента # с помощью remove # Вывод: my_set.remove(6) print(my_set) # удаление элемента, # отсутствующего в my_set, # с помощью discard # Вывод: my_set.discard(2) print(my_set) # При удалении элемента, # отсутствующего в my_set, # с помощью remove # вы получите ошибку. # Вывод: KeyError my_set.remove(2)
Traceback (most recent call last):
File "", line 28, in
KeyError: 2
Удалить и вернуть элемент мы можем с помощью метода pop() .
Так как множество — неупорядоченный тип данных, невозможно определить, какой из элементов будет удален. Это произойдет случайным образом.
Удалить все элементы из множества можно с помощью метода clear() .
# cоздаем my_set # Вывод: множество уникальных элементов my_set = set("Приветмир") print(my_set) # pop элемента # Вывод: случайный элемент print(my_set.pop()) # pop еще одного элемента my_set.pop() print(my_set) # очищаем my_set # Вывод: set() my_set.clear() print(my_set)
Операции со множествами
Множества можно использовать для выполнения математических операций вроде объединения, пересечения, симметрической разности и т. д. Сделать это можно с помощью операторов и методов.
Рассмотрим два множества и проведем с ними разные операции.
Объединение
Результат бъединения A и B — множество, содержащее в себе все элементы множеств A и B.
Операцию объединения можно произвести двумя способами: с помощью оператора | и метода union() .
# Операция объединения двух множеств # Создаем множества A и B A = B = # Используем оператор | # Вывод: print(A | B)
Попробуйте ввести следующие примеры в консоль:
# используем функцию union >>> A.union(B) # используем функцию union с B >>> B.union(A)
Пересечение
Результат пересечения A и B — множество, которому принадлежат те и только те элементы, которые одновременно принадлежат всем данным множествам
Операцию объединения можно произвести двумя способами: с помощью оператора & и метода intersection() .
# Пересечение множеств # Создаем множества A и B A = B = # Используем оператор & # Вывод: print(A & B)
Попробуйте ввести следующие примеры в консоль:
# использование метода intersection с A >>> A.intersection(B) # использование метода intersection с B >>> B.intersection(A)
Разность
Результат разности множеств B и A — множество элементов, содержащихся только в A. Следовательно, B-A = множество элементов, содержащихся только в B.
Операцию объединения можно произвести двумя способами: с помощью оператора — и метода difference() .
# Разность двух множеств # Создаем множества A и B A = B = # Используем оператор - с A # Вывод: print(A - B)
Попробуйте ввести следующие примеры в консоль:
# Использование функции difference с A >>> A.difference(B) # Использование оператора - с B >>> B - A # Использование функции difference с B >>> B.difference(A)
Симметрическая разность
Результат симметрической разности множеств A и B — множество элементов, содержащихся и в A, и в B, но не в обоих сразу. Иначе говоря, исключается только пересечение множеств.
Операцию объединения можно произвести двумя способами: с помощью оператора ^ и метода symmetric_difference() .
# Симметрическая разность множеств A и B # Создаем множества A и B A = B = # Используем оператор ^ # Вывод: print(A ^ B)
Попробуйте ввести следующие примеры в консоль:
# Использование функции symmetric_difference с A >>> A.symmetric_difference(B) # Использование функции symmetric_difference с B >>> B.symmetric_difference(A)
Методы множеств
У множеств много методов, некоторые мы уже обсудили выше. Вот полный список методов объекта set :
Добавляет элемент в множество
Удаляет все элементы из множества
Возвращает копию множества
Возвращает новое множество — разность двух или более множеств
Удаляет все элементы одного набора из другого
Удаляет элемент, если он содержится в множестве (если элемента в множестве нет, то ничего не происходит)
Возвращает новое множество — пересечение двух множеств
Добавляет в множество пересечение с другим множеством или с самим собой
Возвращает True , если два множества не имеют пересечения
Возвращает True , если определенное множество содержится в другом множестве
Возвращает True , если в множестве есть другое множество
Удаляет и возвращает случайный элемент множества. Если множество пусто, то возвращает ошибку KeyError
Удаляет определенный элемент множества. Если элемент отсутствует в множестве, то возвращает ошибку KeyError
Возвращает новое множество — симметрическую разность двух множеств
Добавляет в множество симметрическую разницу с другим множеством или с самим собой
Возвращает новое множество — объединение множеств
Добавляет в множество объединение с другим множеством или с самим собой
Несколько операций со множествами
Проверка на вхождение
Мы можем проверить, есть ли элемент в множестве. Сделать это можно с помощью ключевого слова in .
# Использование ключевого слова in # Создаем множество my_set my_set = set("яблоко") # Проверяем, есть ли 'о' в множестве # Вывод: True print('о' in my_set) # Проверяем, отсутствует ли 'к' в множестве # Output: False print('к' not in my_set)
Итерирование по множеству
Множество можно перебрать с помощью цикла for .
for letter in set("яблоко"): print(letter)
Встроенные функции множеств
Возвращает True , если все элементы множества истинны или множество пустое
Возвращает True , если хоть один элемент множества истинен. Если множество пустое, возвращает False
Возвращает перечисляемый объект. В нем в виде пар содержатся значения и индексы всех элементов множества
Возвращает длину (количество элементов) множества
Возвращает наибольший элемент множества
Возвращает наименьший элемент множества
Возвращает отсортированный список, в котором находятся элементы множества (само множество не сортируется)
Возвращает сумму всех элементов множества
Frozenset
Frozenset — класс, имеющий характеристики множества. Отличие состоит в том, что frozenset после объявления неизменяем.
Кортеж — неизменяемый список, frozenset — неизменяемое множество.
Множества изменяемы, поэтому не могут использоваться в качестве ключей словаря. Frozenset же неизменяемы — их можно использовать в качестве ключей словаря.
Этот тип данных поддерживает следующие методы: copy() , difference() , intersection() , isdisjoint() , issubset() , issuperset() , symmetric_difference() и union() . Так как он неизменяем, методы add() и remove() с ним не работают.
# Frozenset # Создаем множества A и B A = frozenset([1, 2, 3, 4]) B = frozenset([3, 4, 5, 6])
Попробуйте ввести следующие примеры в консоль:
>>> A.isdisjoint(B) False >>> A.difference(B) frozenset() >>> A | B frozenset() >>> A.add(3) . AttributeError: 'frozenset' object has no attribute 'add' ```