Python: Cловари и множества

Теория: Методы объектов множеств

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

Операции над множествами как методы

С теорией множеств программисты обычно знакомы, хотя бы поверхностно. Поэтому множества нужно использовать в сочетании с операторами. Однако было бы неправильно умолчать, что у каждого оператора есть свой словесный метод-аналог.

Познакомимся с этими методами-аналогами:

a.union(b)  # аналог "a | b"
a.intersection(b)  # аналог "a & b"
a.difference(b)  # аналог "a - b"
a.symmetric_difference(b)  # аналог "a ^ b"

Обновление множеств «по месту»

Есть еще одна причина, по которой мы рассказываем про четыре метода выше. Вспомним метод update у словаря, который обновляет словарь «по месту» с помощью данных из другого словаря.

Так вот, для множеств существует несколько таких update-методов:

  • difference_update
  • intersection_update
  • symmetric_difference_update
  • update

Рассмотрим их подробнее:

  1. Метод difference_update работает похоже на -/difference. Он удаляет из связанного множества все элементы, которые входят в множество-аргумент:

    a, b = {1, 2}, {2, 3}
    a.difference_update(b)
    a  # {1}
  2. Метод intersection_update и его изменяющий аналог &/intersection. Он оставляет в связанном множестве только те элементы, которые входят и в множество-аргумент:

    a, b = {1, 2}, {2, 3}
    a.intersection_update(b)
    a  # {2}
  3. Метод symmetric_difference_update и его изменяющий аналог ^/symmetric_difference. Он добавляет в связанное множество элементы, которые есть только в множестве-аргументе. Также он удаляет элементы, которые есть в обоих множествах:

    a, b = {1, 2}, {2, 3}
    a.symmetric_difference_update(b)
    a  # {1, 3}
  4. Метод update и его изменяющий аналог |/union. Он дополняет связанное множество отсутствующими элементами из множества-аргумента:

    a, b = {1, 2}, {2, 3}
    a.update(b)
    a  # {1, 2, 3}

    С точки зрения единообразия метод update надо было бы назвать union_update. Для него выбрали более распространенное имя update, потому что это имя часто используется для сходных по смыслу методов других коллекций.

Рекомендуемые программы