Статью подготовили специалисты образовательного сервиса Zaochnik
Множества в Python: работа с элементами множества
- 19 февраля 2025
- 9 минут
- 13
Множество представляет собой «мешок» с уникальными, неупорядоченными значениями. Оно может включать элементы любых типов. Существуют стандартные операции, которые можно выполнять над двумя множествами, такие как объединение, пересечение и разность.
Понятие Множество
Множество в языке Python представляет собой структуру данных, аналогичную математическим множествами. Оно может состоять из различных элементов, при этом порядок их расположения не имеет значения. В множества можно добавлять и удалять элементы, выполнять их перебор, а также осуществлять математические операции, такие как объединение, пересечение и разность. Кроме того, можно проверить, принадлежит ли элемент данному множеству.
В отличие от массивов, где элементы упорядочены в виде последовательного списка, в множествах хранение элементов не имеет определённого порядка (более того, элементы располагаются не последовательно, как в списках, а с использованием сложных алгоритмов). Это позволяет значительно ускорить операции проверки принадлежности элемента множеству по сравнению с простым перебором всех его элементов.
Элементами множества могут быть любые неизменяемые типы данных, такие как числа, строки или кортежи. Однако изменяемые типы данных, например, списки или другие множества, не могут быть элементами множества. Это ограничение связано с особенностями хранения множеств в памяти компьютера.
Задание множеств
Множество объявляется перечислением всех включённых в него элементов, заключённых в фигурные скобки.
A = {1, 2, 3}
Пустое множество можно создать с помощью функции `set()`. Если в функцию `set` передать список, строку или кортеж, она вернёт множество, составленное из этих элементов.
A = set('qwerty')
print(A)
На выходе будет получено множество: {‘e’, ‘q’, ‘r’, ‘t’, ‘w’, ‘y’}.
Каждый элемент многократно не может входить в множество, а порядок их объявления не имеет значения.
A = {1, 2, 3}
B = {3, 2, 3, 1}
print(A == B)
выведет `True`, так как A и B — это одни и те же множества.
Каждый элемент может существует только в одном экземпляре. Например, `set('Hello')` создаст множество из четырёх уникальных символов: {‘H’, ‘e’, ‘l’, ‘o’}.
Создание множества
a_set = {1} # (1)
a_set
{1}
type(a_set) # (2)
<class 'set'>
a_set = {1, 2} # (3)
a_set
{1, 2}
Чтобы создать множество с единственным значением, используются фигурные скобки ({}). Множества реализованы как классы. Для создания множества с несколькими значениями необходимо отделить их запятыми, поместив в фигурные скобки.
Создание множество на основе списка
a_list = ['a', 'b', 'mpilgrim', True, False, 42]
a_set = set(a_list) # (1)
a_set # (2)
{'a', False, 'b', True, 'mpilgrim', 42}
Добавляя элементы в множество, порядок добавления не сохраняется.
Создание пустого множества
a_set = set() # (1)
a_set # (2)
set()
type(a_set) # (3)
<class 'set'>
len(a_set) # (4)
0
Использование `{}` создаст пустой словарь:
not_sure = {}
type(not_sure)
<class 'dict'>
Чтобы получить пустое множество, необходимо вызвать `set()` без аргументов. Печать пустого множества может показаться странной, так как ожидалось увидеть `{}`, однако это означает пустой словарь, а не множество. Несмотря на это, это действительно пустое множество, не содержащее никаких элементов. В Python 2 нельзя было создать пустое множество с помощью двух фигурных скобок, так как они создают пустой словарь.
Изменение множества
Чтобы добавить элементы в уже существующее множество, используются методы `add()` и `update()`.
- Метод `add()` принимает один аргумент любого типа и добавляет его в множество. Однако если использовать уже существующее значение, оно просто игнорируется, так как множества содержат только уникальные значения.
- Метод `update()` принимает множество или список в качестве аргумента и добавляет все его элементы в исходное множество.
Удаление элементов из множества
Существует несколько методов для удаления элементов из множества: `discard()` и `remove()`.
- Метод `discard()` удаляет значение, переданное ему в качестве аргумента, из множества. Если это значение отсутствует, никаких действий не произойдет.
- Метод `remove()`, в свою очередь, тоже удаляет значение, но если его нет в множестве, вызывается исключение `KeyError`.
- Как и списки, множества имеют метод `pop()`. Метод `pop()` удаляет произвольный элемент и возвращает его. В пустом множестве операция `pop()` вызовет исключение `KeyError`. Метод `clear()` удаляет все элементы, оставляя пустое множество, что эквивалентно вызову `a_set = set()`.
Множества в логическом контексте
Возможно использовать множества в логическом контексте, например, в условии `if`:
def is_it_true(anything):
if anything:
print("да, это истина")
else:
print("нет, это ложь")
is_it_true(set()) # (1)
нет, это ложь
is_it_true({'a'}) # (2)
да, это истина
is_it_true({False}) # (3)
да, это истина
В логическом контексте пустое множество считается ложным, тогда как любое непустое множество — истинным.
Работа с элементами множеств
Чтобы узнать количество элементов в множестве, используется функция `len`, как и в случае с массивами или строками. Например, `len(C)`.
Для проверки принадлежности элемента множеству применяется оператор `in`, который возвращает значение типа bool (True или False): ```i in A```.
Существует также обратный оператор `not in`. Для добавления элемента в множество применяется метод `add`: ```A.add(x)```.
Элементы можно удалять с помощью двух методов:
- `discard`
- `remove`.
Их поведение различается в том случае, если удаляемый элемент отсутствует в множестве: `discard` в этом случае не делает ничего, а `remove` вызовет исключение `KeyError`.
Метод `pop` удаляет случайный элемент из множества и возвращает его значение. Если множество пусто, произойдёт исключение `KeyError`.
Чтобы преобразовать множество в список, можно использовать функцию `list`.
Перебор элементов множества
С помощью цикла `for` возможно перебрать все элементы множества:
Primes = {2, 3, 5, 7, 11}
for num in Primes:
print(num)
Таблица ключевых операций с множествами
В 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.difference_update(B)` — удаляет из A элементы, находящиеся в B. |
`A ^ B` | `A.symmetric_difference(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]` вызовет исключение.