Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Удаление элементов множества. Основные операции с множествами. Множества в логическом контексте




Удаление элементов множества

Существуют три способа удаления отдельных значений из множества. Первые два, 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}) ③
да, это истина

В логическом контексте пустое множество — ложь.
Любое множество, содержащее хотя бы один элемент — истина.
Любое множество, содержащее хотя бы один элемент — истина. Значения элементов не важны.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...