Похожие презентации:
Множества в 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. Использованиефиксированных множеств.
Программирование