Для чего нужны множества в python
Множество в языке Питон — это структура данных, эквивалентная множествам в математике. Множество может состоять из различных элементов, порядок элементов в множестве неопределен. В множество можно добавлять и удалять элементы, можно перебирать элементы множества, можно выполнять операции над множествами (объединение, пересечение, разность). Можно проверять принадлежность элемента множеству.
В отличие от массивов, где элементы хранятся в виде последовательного списка, в множествах порядок хранения элементов неопределен (более того, элементы множества хранятся не подряд, как в списке, а при помощи хитрых алгоритмов). Это позволяет выполнять операции типа “проверить принадлежность элемента множеству” быстрее, чем просто перебирая все элементы множества.
Элементами множества может быть любой неизменяемый тип данных: числа, строки, кортежи. Изменяемые типы данных не могут быть элементами множества, в частности, нельзя сделать элементом множества список (но можно сделать кортеж) или другое множество. Требование неизменяемости элементов множества накладывается особенностями представления множества в памяти компьютера.
Задание множеств
Множество задается перечислением всех его элементов в фигурных скобках. Исключением явлеется пустое множество, которое можно создать при помощи функции set() . Если функции set передать в качестве параметра список, строку или кортеж, то она вернёт множество, составленное из элементов списка, строки, кортежа. Например:
A = A = set('qwerty') print(A)
Каждый элемент может входить в множество только один раз, порядок задания элементов неважен. Например, программа:
A = B = print(A == B)
выведет True , так как A и B — равные множества.
Каждый элемент может входить в множество только один раз. set(‘Hello’) вернет множество из четырех элементов: .
Работа с элементами множеств
Узнать число элементов в множестве можно при помощи функции len .
Перебрать все элементы множества (в неопределенном порядке!) можно при помощи цикла for :
primes = for num in primes: print(num)
Проверить, принадлежит ли элемент множеству можно при помощи операции in , возвращающей значение типа bool . Аналогично есть противоположная операция not in . Для добавления элемента в множество есть метод add :
A = print(1 in A, 4 not in A) A.add(4)
Для удаления элемента x из множества есть два метода: discard и remove . Их поведение различается только в случае, когда удаляемый элемент отсутствует в множестве. В этом случае метод discard не делает ничего, а метод remove генерирует исключение KeyError .
Наконец, метод pop удаляет из множества один случайный элемент и возвращает его значение. Если же множество пусто, то генерируется исключение KeyError .
Из множества можно сделать список при помощи функции list .
sets (множества)
Множества могут быть изменяемыми и неизменяемыми. Размерность и состав созданного однажды неизменяемого множества не может меняться, вместо этого обычно создаётся новое множество.
Множества обычно используются для проверки вхождения элемента, устранения из последовательности дубликатов, и таких математических операций как: пересечение, объединение, разница и симметичная разница.
Множества не упорядочены, они не хранят ни позицию элемента, ни порядок вставки. Поэтому наборы не поддерживают ни обращение к элементам по индексам, ни срезы, ни какое-либо другое поведение, присущее последовательностям.
Типы множеств в стандартной библиотеке:
Множество (set) — изменяемый набор.
Статичное множество (frozenset) — неизменяемый набор.
На заметку
В двоичных операций, где участуют сразу и множество и статичное множество, результатом будет тип первого операнда. Например, в my = frozenset(‘ab’) | set(‘bc’) my будет статичным множеством.
Проход по элементам
Проход по элементам последовательности производится при помощи for in:
for item in :
print(item)
Количество элементов
Количество элементов в последовательности можно получить, используя функцию len().
len() # 3
Сравнение
Два множества равны тогда и только тогда, когда каждый из элементов множества содержится во втором (когда каждое из множест является подмножеством другого).
Одно множество меньше другого тогда и только тогда, если первое является правильным подмножеством последнего (является подмножеством, но не равно).
Одно множество больше другого тогда и только тогда, когда первое является правильным надмножеством последнего (является надмножеством, но не равно).
Два любых непустых непересекающихся множества не являются равными и не являются подмножествами друг для друга, поэтому следующию сравнения вернут False : a == b , a > b , a < b . Множества не реализуют метод __cmp__().
Ввиду того, что множества реализуют частичное упорядочивание (отношения подмножеств), результат метода list.sort() для списка множеств не определён.
На заметку
Ранее (до +py2.4) множества были доступны из модуля sets в несколько ином виде.
На заметку
О сложности основных операций для данного типа можно узнать из статьи «Сложность операций со множествами».
Синонимы поиска: sets (множества), множество, множества, наборы
Статьи раздела
| frozenset | Статичное (неизменяемое) множество. |
| sets.copy | Возвращает поверхностную копию множества. |
| sets.difference | Возвращает разницу — из элементов данного множества удаляются элемент… |
| sets.intersection | Возвращает пересечение — элементы данного множества, также присутству… |
| sets.isdisjoint | Производит проверку, не пересекается ли рассматриваемое множество с з… |
| sets.issubset | Производит проверку, является ли рассматриваемое множество подмножест… |
| sets.issuperset | Производит проверку, является ли рассматриваемое множество надмножест… |
| sets.symmetric_difference | Возвращает симметричную разницу — только те элементы, которые есть ли… |
| sets.union | Возвращает объединение — элементы данного множества дополняются элеме… |
| set (множество) | Изменяемое множество. |
Множества — Python: Cловари и множества
Ключи словаря хранятся в нем в единственном экземпляре. Добавление нового значения по существующему ключу заменяет старое значение. Хранение в единственном экземпляре полезно и в тех случаях, когда нам нужно хранить не столько значения по ключам, сколько именно сами ключи.
Например, нужно хранить список городов, которые посетил каждый пользователь. При повторном посещении города дублировать запись не требуется. Это позволяет сэкономить память и упростить поиск информации. Также нам может понадобиться узнать, какие города посетили и Вася и Маша, а какие — только Маша или только Вася.
По сути, это хранения перечня элементов в неких наборах и сопоставления этих наборов между собой. В математике для решения такого рода задач служат множества. В свою очередь, Python предоставляет одноименную структуру данных — set .
Итак, множества в Python — это неупорядоченные последовательности элементов, каждый из которых в множестве представлен ровно один раз. С ними мы подробнее познакомимся в этом уроке.
Создание множеств и манипуляции над ними
Множество можно создать с помощью соответствующего литерала:
s = 1, 2, 3, 2, 1> s # type(s) #
Литералы множеств записываются в фигурных скобках, как и литералы словарей. Однако внутри скобок через запятую перечисляются только элементы множества. Литерал <> уже занят словарями, поэтому пустое множество создается вызовом функции set без аргументов:
set() # <> type(set()) #
Эту же функцию можно использовать, чтобы создать множество из элементов произвольного количества итераторов или итерируемых элементов:
set('abracadabra') # set([1, 2, 3, 2, 1]) # set('a': 42, 'b': 'foo'>) #
Заметьте, что в множестве каждый уникальный элемент представлен ровно один раз, даже если в коллекции-источнике были повторы.
Проверка на вхождение
Для некоторых задач нужно проверять, является ли некое значение элементом множества — другими словами, «входит ли оно в множество» или «принадлежит ли оно множеству». В таких случаях нужно использовать оператор in :
42 in set() # False 42 in set([42]) # True 'a' in set('abracadabra') # True
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Для чего нужны множества в Python?
Здравствуйте!
Если со списками, кортежами и словарями, а также их практическими применениями все понятно, то суть множеств для меня не совсем ясна. Где можно применить этот «рандомный список» с не повторяющимися элементами?
Я сначала думал, может он весить должен меньше, чем список, но проверив с помощью __sizeof__(), оказалось, что множество превышает список в весе аж в несколько раз. 123, 456, «hello» = списком весит 64, множеством 200.
Но речь вообщем-то о том, где можно практически применять это множество.
Буду благодарен!
- Вопрос задан более трёх лет назад
- 1397 просмотров
Комментировать
Решения вопроса 1
Владимир Куц @fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Навскидку:
— для быстрого удаления дубликатов, поскольку множества могут содержать только уникальные элементы
— для выполнения математических операций объединения, пересечения, разности множеств


Ответ написан более трёх лет назад
Нравится 2 1 комментарий

Andrey Dugin @adugin Куратор тега Python
Ещё для быстрой проверки «x in set» со сложностью O(1) вместо используемой многими проверки «x in list» со сложностью O(n).
Ответы на вопрос 2
как и сказал Владимир. Нужно хранить уникальные данные и не важно в каком порядке? Используйте множества — с ними быстрее работать. Такими данными могут быть хэши или перечисление всех слов, встречаемых в тексте.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий
Множества — это не «рандомный список». Почитайте. Нужны они для быстрых операций с их членами — пересечением, объединением, разностью. У Скиены, если мне не изменяет память, был пример оценки скорости поиска пересечения. Для множеств из миллиона элементов это заняло 0,02 микросекунды, для соразмерных списков 15 минут.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +1 ещё
Как сделать форму с добавлением нескольких элементов на django?
- 1 подписчик
- 3 часа назад
- 23 просмотра
