Удаление элементов множества. Основные операции с множествами. Множества в логическом контексте
Удаление элементов множества
Существуют три способа удаления отдельных значений из множества. Первые два, discard() и remove(), немного различаются.
> > > a_set = {1, 3, 6, 10, 15, 21, 28, 36, 45}
> > > a_set
{1, 3, 36, 6, 10, 45, 15, 21, 28}
> > > a_set. discard(10) ①
> > > a_set
{1, 3, 36, 6, 45, 15, 21, 28}
> > > a_set. discard(10) ②
> > > a_set
{1, 3, 36, 6, 45, 15, 21, 28}
> > > a_set. remove(21) ③
> > > a_set
{1, 3, 36, 6, 45, 15, 28}
> > > a_set. remove(21) ④
Traceback (most recent call last):
File " < stdin> ", line 1, in < module>
KeyError: 21
Перевод сообщения оболочки:
Раскрутка стека (список последних вызовов):
Файл " < stdin> ", строка 1, < модуль>
KeyError: 21
①
| Метод discard() принимает в качестве аргумента одиночное значение и удаляет это значение из множества.
|
②
| Если вы вызвали метод discard() передав ему значение, которого нет в множестве, ничего не произойдет, просто нулевое действие.
|
③
| Метод remove() также принимает в качестве аргумента одиночное значение, и также удаляет его из множества.
|
④
| Вот в чём отличие: если значения нет в множестве, метод remove() породит исключение KeyError.
|
Подобно спискам, множества имеют метод pop().
> > > a_set = {1, 3, 6, 10, 15, 21, 28, 36, 45}
> > > a_set. pop() ①
1
> > > a_set. pop()
3
> > > a_set. pop()
36
> > > a_set
{6, 10, 45, 15, 21, 28}
> > > a_set. clear() ②
> > > a_set
set()
> > > a_set. pop() ③
Traceback (most recent call last):
File " < stdin> ", line 1, in < module>
KeyError: 'pop from an empty set'
Перевод сообщения оболочки:
Раскрутка стека (список последних вызовов):
Файл " < stdin> ", строка 1, < модуль>
KeyError: 'pop из пустого множества'
①
| Метод pop() удаляет один элемент из множества и возвращает его значение. Однако, поскольку множества неупорядочены, это не «последний» элемент в множестве, поэтому невозможно проконтролировать какое значение было удалено. Удаляется произвольный элемент.
|
②
| Метод clear() удаляет все элементы множества, оставляя вас с пустым множеством. Это эквивалентно записи a_set = set(), которая создаст новое пустое множество и перезапишет предыдущее значение переменной a_set.
|
③
| Попытка извлечения (pop) элемента из пустого множества породит исключение KeyError.
|
Основные операции с множествами
Тип set в Python поддерживает несколько основных операций над множествами.
> > > a_set = {2, 4, 5, 9, 12, 21, 30, 51, 76, 127, 195}
> > > 30 in a_set ①
True
> > > 31 in a_set
False
> > > b_set = {1, 2, 3, 5, 6, 8, 9, 12, 15, 17, 18, 21}
> > > a_set. union(b_set) ②
{1, 2, 195, 4, 5, 6, 8, 12, 76, 15, 17, 18, 3, 21, 30, 51, 9, 127}
> > > a_set. intersection(b_set) ③
{9, 2, 12, 5, 21}
> > > a_set. difference(b_set) ④
{195, 4, 76, 51, 30, 127}
> > > a_set. symmetric_difference(b_set) ⑤
{1, 3, 4, 6, 8, 76, 15, 17, 18, 195, 127, 30, 51}
①
| Чтобы проверить, принадлежит ли значение множеству, используйте оператор in. Он работает так же, как и для списков.
|
②
| Метод union() (объединение) возвращает новое множество, содержащее все элементы каждого из множеств.
|
③
| Метод intersection() (пересечение) возвращает новое множество, содержащее все элементы, которые есть и в первом множестве, и во втором.
|
④
| Метод difference() (разность) возвращает новое множество, содержащее все элементы, которые есть в множестве a_set, но которых нет в множестве b_set.
|
⑤
| Метод symmetric_difference() (симметрическая разность) возвращает новое множество, которое содержит только уникальные элементы обоих множеств.
|
Три из этих методов симметричны.
# продолжение предыдущего примера
> > > b_set. symmetric_difference(a_set) ①
{3, 1, 195, 4, 6, 8, 76, 15, 17, 18, 51, 30, 127}
> > > b_set. symmetric_difference(a_set) == a_set. symmetric_difference(b_set) ②
True
> > > b_set. union(a_set) == a_set. union(b_set) ③
True
> > > b_set. intersection(a_set) == a_set. intersection(b_set) ④
True
> > > b_set. difference(a_set) == a_set. difference(b_set) ⑤
False
①
| Симметрическая разность множеств a_set и b_set выглядит не так, как симметрическая разность множеств b_set и a_set, но вспомните, множества неупорядочены. Любые два множества, все (без исключения) значения которых одинаковы, считаются равными.
|
②
| Именно это здесь и произошло. Глядя на печатное представление этих множеств, созданное оболочкой Python, не обманывайтесь. Значения элементов этих множеств одинаковы, поэтому они равны.
|
③
| Объединение двух множеств также симметрично.
|
④
| Пересечение двух множеств также симметрично.
|
⑤
| Разность двух множеств несимметрична. По смыслу, данная операция аналогична вычитанию одного числа из другого. Порядок операндов имеет значение.
|
Наконец, есть ещё несколько вопросов по множествам, которые вы можете задать.
> > > a_set = {1, 2, 3}
> > > b_set = {1, 2, 3, 4}
> > > a_set. issubset(b_set) ①
True
> > > b_set. issuperset(a_set) ②
True
> > > a_set. add(5) ③
> > > a_set. issubset(b_set)
False
> > > b_set. issuperset(a_set)
False
①
| Множество a_set является подмножеством b_set — все элементы a_set также являются элементами b_set.
|
②
| И наоборот, b_set является надмножеством a_set, потому что все элементы a_set также являются элементами b_set.
|
③
| Поскольку вы добавили элемент в a_set, но не добавили в b_set, обе проверки вернут значение False.
|
Множества в логическом контексте
Вы можете использовать множества в логическом контексте, например, в операторе if.
> > > def is_it_true(anything):
... if anything:
... print(" да, это истина" )
... else:
... print(" нет, это ложь" )
...
> > > is_it_true(set()) ①
нет, это ложь
> > > is_it_true({'a'}) ②
да, это истина
> > > is_it_true({False}) ③
да, это истина
①
| В логическом контексте пустое множество — ложь.
|
②
| Любое множество, содержащее хотя бы один элемент — истина.
|
③
| Любое множество, содержащее хотя бы один элемент — истина. Значения элементов не важны.
|
Воспользуйтесь поиском по сайту: