Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

32. Методы и особенности множеств в Python

Оглавление урока

В уроке 8.1. мы кратко разобрались с множествами. В этом уроке поговорим об особенности множеств, как структуры данных, а так же об доступных методах.

Особенности множеств в Python

Как вы уже знали, чтобы создать множество, необходимо использовать фигурные скобки. Давайте попробуем создать пустое множество.

Пример
s = {}
print(type(s)) # => <class 'dict'>

Как видите, создать пустое множество с использованием фигурных скобок не получится, потому что словари создаются точно так же. Поэтому необходимо указывать явно при помощи функции set().

Пример
s = set()
print(type(s)) # => <class 'set'>

Следующее, что необходимо знать про множества – они являются неупорядоченной структурой и, поэтому вы не сможете обратиться к элементам множества по индексу. Это имеет свои плюсы, о которых будет написано далее.

Чтобы оставить в списке только уникальные элементы, можно его передать во множество:

Пример
s = set([1, 1, 2, 2, 3])
print(list(s)) # => [1, 2, 3]

Как было сказано ранее, получить доступ к конкретному элементу множества по индексу нельзя, но можно перебрать их все с помощью цикла for:

Пример
s = {1, 1, 2, 2, 3}
for item in s:
print(item)

Так же вы можете проверить наличие элемента во множестве при помощи оператора in:

Пример
s = {1, 1, 2, 2, 3}
print(1 in s) # => True

Стоит заметить, что такая проверка выполняется очень быстро. Например, чтобы найти в неотсортированном массиве из n элементов какое-то значение, необходимо пройтись по всем элементам (в худшем случае):

Пример
m = [1, 2, 3, 4, 5]
sought = 5
for i in m:
if (i == sought):
pass

Такой алгоритм обладает линейной сложностью О(n), и с возрастанием числа элементов, сложность увеличивается. Да, кстати, в примере использовался оператор pass, о котором поговорим в уроке 10.3.

Не будем усложнять урок алгоритмами, о них будет отдельный раздел. Добавим только, что поиск элемента во множестве выполняется в среднем за O(1), так как множества основаны на хэш-таблицах.

Сложность алгоритма О(n) и О(1)
Сложность алгоритма О(n) и О(1)

Опять же, об алгоритмах, их сложности и обозначениях поговорим в отдельном разделе.

Последнее, что хотелось сказать об особенностях множеств, это элементы, которые можно в них добавлять. Элементами множеств в Python могут быть только хешируемые объекты, например: числа, строки, кортежи, если они состоят из хешируемых элементов и т.д. В свою очередь, списки и словари не могут быть элементами множества. В уроке 2.3. мы говорили про типы данных и их классификации. Далее пример использования списков в виде элементов множества:

Пример
a = [1, 2]
b = [2, 3]
s = {a, b}
print(s) # => TypeError: unhashable type: 'list'

Возникла ошибка, сообщающая о невозможности создания множества из списков из-за того, что тип list не является хешируемым.

Методы множеств в Python

Множества в Python имеют свои методы. Чтобы добавить элемент во множество, существует метод add().

Пример
s = {1, 1, 2, 2, 3}
s.add(3)
s.add(4)

print(s) # => {1, 2, 3, 4}

Удалить элемент из множества можно двумя методами: remove() и discard(). Сейчас разберемся в их различии. Для начала удалим обоими методами элементы, которые находятся во множестве:

Пример
s = {1, 1, 2, 2, 3}
s.remove(1)
s.discard(2)
print(s) # => {3}

Как видите, разницы в удалении существующих элементов множества нет. Но что произойдет, если попытаться удалить несуществующий элемент:

Пример
s = {1, 1, 2, 2, 3}
s.discard(5)
print(s) # => {1, 2, 3}

Ничего не произошло. Совсем другая ситуация обстоит с методом remove():

Пример
s = {1, 1, 2, 2, 3}
s.remove(5)
print(s)

При выполнении кода возникло исключение KeyError:

Пример
Traceback (most recent call last):
File "C:/set.py", line 2, in <module>
s.remove(5)
KeyError: 5

Что такое исключения в Python, когда они возникают и как их перехватывать, вы узнаете в уроке 10.5.

Чтобы вернуть «случайный» элемент и удалить его из множества, используйте метод pop():

Пример
s = {1, 1, 2, 2, 3}

print(s.pop()) # => 1
print(s.pop()) # => 2
print(s.pop()) # => 3

Для очистки множества от элементов существует метод clear():

Пример
s = {1, 1, 2, 2, 3}
s.clear()
print(s) # => set()

В этом урок мы более подробно остановились на особенностях множеств и познакомились с несколькими методами множеств в Python.

Похожие уроки и записи блога

Типы данных в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Работа с файлами в Python Знакомство с Python
Функциональное программирование: map, filter и reduceЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Продолжаем написание классов в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Первое знакомство с PythonЗнакомство с Python
Еще о возможностях модулей в Python Знакомство с Python
<
×
>
Раздел «Знакомство с Python»
1. УРОК: Первое знакомство с Python
2. ТЕСТ: Небольшой первый тест по Python
3. УРОК: Переменные и комментарии в Python
4. ТЕСТ: Тест по основным понятиям и работе с сайтом
Самые основы
5. УРОК: Погружение в Python
6. ТЕСТ: Второй вводный тест по Python
7. УРОК: Типы данных в Python
8. УРОК: Форматирование строк в Python
9. УРОК: Условная инструкция if-elif-else в Python
10. УРОК: Преобразование и проверка типов в Python
11. УРОК: Вызов методов цепочкой в Python
Циклы
12. УРОК: Первое знакомство с циклами в Python
13. ТЕСТ: Тест по циклам Python
Немного рандома
14. УРОК: Генерируем случайные числа на Python
15. ТЕСТ: Тест по модулю random Python
Структуры данных
16. УРОК: Структуры данных в Python
17. ТЕСТ: Тест по структурам Python
Списки
18. УРОК: Списки в Python
19. ТЕСТ: Тест по спискам Python
20. УРОК: Изменение списка на месте в Python
21. УРОК: Дополнительно про списки в Python
22. УРОК: Конкатенация и сортировка списков в Python
23. ТЕСТ: Заключительный тест по спискам в Python
Словари
24. УРОК: Словари в Python
25. ТЕСТ: Тест по словарям Python
26. УРОК: Словари и списки: еще глубже
27. УРОК: Перебор элементов словаря в Python
28. УРОК: Внутреннее устройство и сортировка словаря в Python
29. УРОК: Методы словарей и функция len() в Python
30. ТЕСТ: Заключительный тест по словарям
Множества
31. УРОК: Множества в Python
УРОК 32. Методы и особенности множеств в Python
Вы здесь
33. УРОК: Отношения между множествами и операции над ними
34. ТЕСТ: Тест по методам множеств в Python
35. ТЕСТ: Тест по операциям над множествами в Python
Кортежи
36. УРОК: Кортежи в Python
37. УРОК: Более подробно о кортежах в Python
38. ТЕСТ: Тест по кортежам в Python
Снова циклы и немного исключений
39. УРОК: Контроль хода выполнения программы в Python
40. УРОК: Цикл while в Python
41. УРОК: Операторы break, continue и pass в Python
42. УРОК: Циклы for/else и while/else в Python
43. УРОК: Обработка исключений (try/except) в Python
44. ТЕСТ: Тест по циклам и управляющим конструкциям
45. ТЕСТ: Тест по обработке исключений
Работаем с файлами
46. УРОК: Работа с файлами в Python
47. УРОК: Оператор with/as для работы с файлами в Python
48. ТЕСТ: Тест по работе с файлами в Python
Итераторы
49. УРОК: Итераторы в Python
50. УРОК: List/dict/set comprehensions (включения) в Python
51. ТЕСТ: Тест по включениям в Python
Функции
52. УРОК: Основы функций в Python
53. ТЕСТ: Тест по основам функций в Python
54. УРОК: Область видимости в Python
55. ТЕСТ: Тест по области видимости в Python
56. УРОК: Замыкания и оператор nonlocal в Python
57. ТЕСТ: Тест по замыканиям и nonlocal в Python
58. УРОК: Аргументы и параметры функций, операторы * и ** в Python
59. ТЕСТ: Тест по аргументам и параметрам функций в Python
60. ТЕСТ: Тест по операторам * и ** в Python
61. УРОК: Анонимные функции: выражения lambda
62. УРОК: Функциональное программирование: map, filter и reduce
63. ТЕСТ: Тест по парадигме функционального программирования
64. УРОК: Генераторы и оператор yield в Python
65. ТЕСТ: Тест по генераторным функциям и выражениям
Модули
66. УРОК: Модули в Python
67. УРОК: Написание модулей в Python
68. УРОК: Пакеты модулей в Python
69. УРОК: Еще о возможностях модулей в Python
70. ТЕСТ: Тест по модулям и пакетам в Python
Объектно-ориентированное программирование
71. УРОК: Основы объектно-ориентированного программирования (ООП) в Python
72. ТЕСТ: Тест по основам ООП в Python
73. УРОК: Основы написания классов в Python
74. УРОК: Продолжаем написание классов в Python
75. УРОК: Более глубокое изучение классов в Python
76. УРОК: Что дальше?
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно