Ограничения на применение множеств. Применение класса frozenset. Генераторы множеств
Содержание
- 1. Ограничения на множества. Какие типы запрещено использовать в множествах?
- 2. Какие типы разрешено включать в множества?
- 3. Особенности использования класса frozenset для множеств. Пример
- 4. Генераторы множеств. Понятие. Общая форма
- 5. Примеры генераторов множеств
- Связанные темы
Поиск на других ресурсах:
1. Ограничения на множества. Какие типы запрещено использовать в множествах?
В множества запрещено включать объекты изменяемых (mutable) типов, а именно:
- списки;
- словари;
- изменяемые (mutable) множества, которые были созданы конструктором класса set или операцией присваивания.
Если попробовать включить в множество изменяемый тип, то интерпретатор выдаст ошибку
TypeError: unhashable type: 'set'
⇑
2. Какие типы разрешено включать в множества?
В множества разрешается включать объекты так называемых неизменяемых или «хешированных» (hashable) типов. Объект считается «хешированным», если он имеет значение, которое никогда не изменяется на протяжении жизни этого объекта в программе.
К хешированным типам, объекты которых можно включать в множества, относятся:
- числовые типы (вещественные, целые типы);
- логический тип;
- строчный тип;
- кортеж;
- неизменяемое множество, которое было создано с помощью конструктора класса frozenset.
⇑
3. Особенности использования класса frozenset для множеств. Пример
Класс frozenset предназначен для создания неизменяемого (immutable) множества. Добавить новые элементы к неизменяемому множеству или как-то его изменить не получится. Неизменяемое множество может быть включено как элемент (составляющая) другого множества.
Для неизменяемого множества нельзя применить функции, которые его изменяют:
- update() – объединение текущего множества с другими;
- intersection_update() – пересечение текущего множества с другими;
- difference_update() – разность текущего множества с другими;
- symmetric_difference_update() – симметричная разность текущего множества с другим множеством;
- add() – добавление элемента в текущее множество;
- remove() – удаление элемента из текущего множества;
- discard() – удаление элемента из текущего множества, если он имеется в нем;
- pop() – вытягивание элемента из текущего множества;
- clear() – удаление всех элементов из множества.
Более подробно о работе этих функций описывается в теме:
Пример.
# Множества # Функция frozenset() - создание множества неизменяемого типа x = frozenset([1, 2, 3, 4]) # x - неизменяемое (immutable) множество y = set([5,6,7]) # y - изменяемое (mutable) множество z = { 8, 9, x } # в множество z включено множество x, множество z - изменяемое print('x = ', x) print('y = ', y) print('z = ', z)
Результат выполнения программы
x = frozenset({1, 2, 3, 4}) y = {5, 6, 7} z = {8, 9, frozenset({1, 2, 3, 4})}
⇑
4. Генераторы множеств. Понятие. Общая форма
Генератор множеств – это специальная конструкция, которая предназначена для создания множества с помощью цикла for.
Общая форма генератора множеств
{ statement for item in [items]}
где
- statement – выражение (формула), формирующая элементы новосозданного множества основываясь на перечне items;
- item – элемент множества, которое используется в выражении statement. Этот элемент принимает значение из набора элементов items;
- items – множество элементов исходного множества, которые перечислены через запятую. Множество элементов items есть непосредственными данными, которые используются в выражении statement для формирования нового множества.
⇑
5. Примеры генераторов множеств
Пример 1. С целыми числами.
# Генератор множеств # Сформировать множество из целых чисел y = { 3*x for x in set([1,2,3,4,5,6])} # y = {3, 6, 9, 12, 15, 18} print('y = ', y) z = { t*t for t in { 2, 4, 6, 8 }} print('z = ', z)
Результат выполнения программы
y = {3, 6, 9, 12, 15, 18} z = {64, 16, 4, 36}
Пример 2. С вещественными числами.
# Генератор множеств # Сформировать множество из вещественных чисел y = { x+0.5 for x in set([1.5, 2.5, 3.5, -8.0])} # y = {-7.5, 2.0, 3.0, 4.0} print('y = ', y) z = { t + 2*t for t in { 0.5, 0.75, 1.2, -3.4 }} print('z = ', z) # z = {3.5999999999999996, 1.5, 2.25, -10.2}
Результат работы программы
y = {-7.5, 2.0, 3.0, 4.0} z = {3.5999999999999996, 1.5, 2.25, -10.2}
Пример 3. Со строками символов.
# Генератор множеств # Сформировать множество из строки символов x = { s for s in set('abcdef')} # x = {'a', 'd', 'c', 'f', 'e', 'b'} print('x = ', x) y = { s*3 for s in set('1DF')} print('y = ', y) z = { '_'+s for s in {'j', 'k', 'l'}} print('z = ', z)
Результат выполнения программы
x = {'b', 'c', 'f', 'd', 'e', 'a'} y = {'FFF', '111', 'DDD'} z = {'_l', '_k', '_j'}
⇑
Связанные темы
- Основные понятия. Создание множества. Операция in. Операции над множествами создающие новое множество
- Операции и функции для определения надмножеств и подмножеств. Сравнение множеств
- Классы set, frozenset. Функции для работы с множествами. Назначение. Примеры
⇑