Множества в Python
Понятие множества в Python
Создание множеств в Python
Пример №2. Создание множеств в Python (часть 2).
Пример №3. Создание множеств в Python (часть 3).
Операторы множеств в Python
Пример №4. Математические операции над множествами.
Пример №5. Использование оператора in применительно к множествам.
Применим к множествам и оператор цикла for, который обходит множество по его элементам (см. пример №6).
Функции и методы множеств в Python
Пример №7. Методы множеств (часть 1).
Пример №8. Методы множеств (часть 2).
Пример №9. Методы множеств (часть 3).
Фиксированные множества в Python
Пример №10. Использование фиксированных множеств.
3.36M
Категория: ПрограммированиеПрограммирование

Множества в Python

1. Множества в Python

Понятие множества в Python
Создание множеств в Python
Операторы множеств в Python
Функции и методы множеств в Python
Фиксированные множества в Python

2. Понятие множества в Python

• Для хранения наборов уникальных объектов в Python был
введен еще один тип данных, называемый «множества».
• Множества (от англ. set) – это неупорядоченные
коллекции уникальных и неизменяемых объектов,
называемых элементами множества.
• Как следует из определения, множества не являются
последовательностями, как списки или кортежи, и в тоже
время не являются отображениями, как словари.
• Это просто коллекции уникальных и неизменяемых
объектов, во многом похожие на привычные нам
математические множества. Мы можем объединять их,
искать пересечение, находить разность или выполнять над
ними какие-нибудь другие типичные математические
операции.

3. Создание множеств в Python

Для того, чтобы
в Python создать литерал
множества, нужно просто
перечислить элементы
множества через запятую внутри
фигурных скобок (см.
пример №1). При этом
последний элемент множества
также разрешается завершать
запятой, поскольку это никак не
повлияет на количество
элементов в нем.

4.

• Как видим, множества действительно состоят из
наборов неизменяемых уникальных значений.
Если попытаться добавить в множество
изменяемый элемент, интерпретатор выдаст
ошибку.
• Попытка создания множества с несколькими
одинаковыми элементами ошибки не вызовет, но
интерпретатор преобразует его так, чтобы в нем
остался только один из одинаковых элементов.
• Также при помощи фигурных скобок не получится
создать
пустое
множество,
ведь
конструкция {} зарезервирована под пустой
словарь.

5.

• Однако создать пустое множество можно при помощи
встроенного конструктора типа set([iterable]), который в
качестве аргумента может принимать итерируемый объект,
например, строку или список.
• Если использовать конструктор без аргумента, он как раз и
вернет нам пустое множество set(). Если же использовать
конструктор с аргументом, он вернет нам множество с
элементами переданного итерируемого объекта (см.
пример №2).

6. Пример №2. Создание множеств в Python (часть 2).

Пример №2. Создание множеств в
Python (часть 2).

7.

• Обратите внимание, что если передать конструктору
другое множество, он вернет его поверхностную копию.
Также имейте в виду, что при передаче конструктору
кортежа с одним элементом нужно использовать
завершающую запятую, чтобы интерпретатор мог
отличить кортеж от простого выражения.
• Для создания множеств в Python можно использовать и
генераторы множеств, которые применяют выражение к
каждому элементу передаваемого итерируемого объекта и
на основе их вычисления возвращают новое множество
(см. пример №3).

8. Пример №3. Создание множеств в Python (часть 3).

Пример №3. Создание множеств в
Python (часть 3).

9.

• Таким образом, в простейшем случае для генерации
множества нужно в фигурных скобках написать
выражение, которое будет применяться к каждому
элементу передаваемого итерируемого объекта, и через
пробел
прописать
соответствующий
заголовок
цикла for без завершающего двоеточия.
• При использовании для создания множеств любого из
перечисленных методов важно помнить, что будущие
элементы множества должны быть неизменяемыми.
Можно, например, использовать числа, строки,
логические значения True и False, объект None или
кортеж, состоящий из неизменяемых элементов. Но
использовать словари или списки в качестве элементов
множества не получится.

10. Операторы множеств в Python


Поскольку множества, как и словари, относятся к неупорядоченным коллекциям объектов,
операторы +, +=, * и *= с ними не используются. Однако множествам доступен целый ряд других
математических операторов:
s_1 >= s_2 – возвращает True, если множество s_1 является надмножеством s_2, т.е. каждый элемент
второго множества есть в первом множестве (см. пример №4);
s_1 > s_2 – возвращает True, если множество s_1 является надмножеством s_2 и при этом они не
равны (поэтому, например, проверка {1, 2} > {1, 2} вернет False);
s_1 <= s_2 – возвращает True, если множество s_1 является подмножеством s_2, т.е. каждый элемент
первого множества есть во втором множестве;
s_1 < s_2 – возвращает True, если множество s_1 является подмножеством s_2 и при этом они не
равны (поэтому, например, проверка {1, 2} < {1, 2} вернет False);
s_1 | s_2 – возвращает новое множество, образуемое через объединение множеств (такое множество
состоит из всех элементов, которые есть хотя бы в одном из множеств, участвующих в операции);
s_1 |= s_2 – обновляет множество s_1, добавляя элементы из множества s_2;
s_1 & s_2 – возвращает новое множество, образуемое через пересечение множеств (такое множество
состоит из всех элементов, которые есть сразу в обоих множествах, участвующих в операции);
s_1 &= s_2 – обновляет множество s_1, оставляя в нем только элементы, которые есть сразу в обоих
множествах, участвующих в операции;
s_1 - s_2 – возвращает новое множество, образуемое через разность множеств (такое множество
состоит из всех элементов, которые есть в уменьшаемом множестве (левый операнд), но нет в
вычитаемом множестве (правый операнд));
s_1 -= s_2 – обновляет множество s_1, оставляя в нем только элементы, которых нет в множестве s_2;
s_1 ^ s_2 – возвращает новое множество, образуемое через симметричную разность множеств (такое
множество состоит из всех элементов, которые есть в одном из множеств, участвующих в операции,
но не в обоих сразу).
s_1 ^= s_2 – обновляет множество s_1, оставляя в нем только элементы, которые есть в одном из
множеств, участвующих в операции, но не в обоих сразу.

11. Пример №4. Математические операции над множествами.

Пример №4. Математические
операции над множествами.

12.

• Следует помнить, что известные нам математические
операторы >, >=, < и <= не сравнивают множества по
количеству элементов, а проверяют на вхождение одного
множества в другое (поэтому, например, операция {1, 2, 3}
> {4, 5} вернет False, хотя элементов в первом множестве
больше).
• Что касается оператора проверки на вхождение in, то
применительно к множествам он совершает поиск
переданного объекта (левый операнд) среди элементов
целевого множества (правый операнд). В случае успеха
операция возвращает True, иначе – False (см. пример №5).

13. Пример №5. Использование оператора in применительно к множествам.

Пример №5. Использование оператора
in применительно к множествам.

14. Применим к множествам и оператор цикла for, который обходит множество по его элементам (см. пример №6).

Применим к множествам и оператор
цикла for, который обходит множество по
его элементам (см. пример №6).

15. Функции и методы множеств в Python

• set.isdisjoint(other) – возвращает True, если у
множества set нет общих элементов с указанным
множеством other (см. пример №7).
• set.issubset(other) – тоже самое, что и set <= other (см.
операторы выше).
• set.issuperset(other) – тоже самое, что и set >= other.
• set.union(*others) – тоже самое, что и set | other | ....
• set.intersection(*others) – тоже самое, что и set & other &
....
• set.difference(*others) – тоже самое, что и set - other - ....
• set.symmetric_difference(other) – тоже самое, что и set ^
other.

16. Пример №7. Методы множеств (часть 1).

Пример №7. Методы множеств (часть 1).

17.

• Обратите внимание, что вышеперечисленные методы
исходные множества не изменяют. Кроме того, как видно из
примера, многие методы можно использовать как в форме
общего метода класса, так и в форме метода конкретного
объекта. Например, инструкции set.union(s_1, s_2,
s_3) и s_1.union(s_2, s_3) в обоих случаях вернут
множество {1, 2, 3, 4}.
• А вот update-методы должны использоваться в форме
метода конкретного объекта. Они обновляют само
множество и возвращают None (см. пример №8).
• set.update(*others) – тоже самое, что и set |= other | ....
• set.intersection_update(*others) – тоже самое, что и set &=
other & ....
• set.difference_update(*others) – тоже самое, что и set -=
other | ....
• set.symmetric_difference_update(other) – тоже самое, что
и set ^= other.

18. Пример №8. Методы множеств (часть 2).

Пример №8. Методы множеств (часть 2).

19.

• set.add(elem) – добавляет в множество указанный
элемент elem и возвращает None (см. пример №9).
• set.discard(elem) – удаляет указанный элемент elem, если
он присутствует в множестве, и возвращает None.
• set.remove(elem) – также удаляет указанный элемент elem,
если он присутствует в множестве и возвращает None.
Однако, в отличие от метода выше, если множество такого
элемента не содержит, метод возбудит
исключение KeyError.
• set.pop() – удаляет и возвращает произвольный элемент
множества. Если множество окажется пустым, метод
возбудит исключение KeyError.
• set.copy() – возвращает поверхностную копию множества.
• set.clear() – очищает множество, удаляя все его элементы,
и возвращает None.

20. Пример №9. Методы множеств (часть 3).

Пример №9. Методы множеств (часть 3).

21.

• Помимо собственных методов к множествам применим и
ряд встроенных функций:
• min() (возвращает элемент с минимальным значением, при
этом элементы должны быть одного типа с возможностью
сравнения),
• max() (возвращает элемент с максимальным значением,
при этом элементы должны быть одного типа с
возможностью сравнения),
• sum() (возвращает сумму элементов множества, при этом
элементы должны быть числами),
• len() (возвращает количество элементов в множестве) и т.д.

22. Фиксированные множества в Python

• Довольно часто возникают ситуации, когда нужно
обеспечить неизменяемость используемого множества.
• В таких случаях при создании или преобразовании
множества необходимо вместо
конструктора set([iterable]) использовать
конструктор frozenset([iterable]), который
создает фиксированное множество.
• Единственное отличие фиксированного множества от
обычного заключается в том, что оно неизменяемо.
Соответственно, как и в ситуации с кортежами и списками,
для фиксированных множеств становятся недоступны ряд
методов, которые пытаются их изменить (см.
пример №10).

23. Пример №10. Использование фиксированных множеств.

Пример №10. Использование
фиксированных множеств.
English     Русский Правила