Автор статьи

Статью подготовили специалисты образовательного сервиса Zaochnik

Множества в Python: работа с элементами множества

Множество представляет собой «мешок» с уникальными, неупорядоченными значениями. Оно может включать элементы любых типов. Существуют стандартные операции, которые можно выполнять над двумя множествами, такие как объединение, пересечение и разность.

Понятие Множество

Множество в языке Python представляет собой структуру данных, аналогичную математическим множествами. Оно может состоять из различных элементов, при этом порядок их расположения не имеет значения. В множества можно добавлять и удалять элементы, выполнять их перебор, а также осуществлять математические операции, такие как объединение, пересечение и разность. Кроме того, можно проверить, принадлежит ли элемент данному множеству.

В отличие от массивов, где элементы упорядочены в виде последовательного списка, в множествах хранение элементов не имеет определённого порядка (более того, элементы располагаются не последовательно, как в списках, а с использованием сложных алгоритмов). Это позволяет значительно ускорить операции проверки принадлежности элемента множеству по сравнению с простым перебором всех его элементов.

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

Задание множеств

Множество объявляется перечислением всех включённых в него элементов, заключённых в фигурные скобки.

Пример 1

A = {1, 2, 3}

Пустое множество можно создать с помощью функции `set()`. Если в функцию `set` передать список, строку или кортеж, она вернёт множество, составленное из этих элементов. 

Пример 2

A = set('qwerty')

print(A)

На выходе будет получено множество: {‘e’, ‘q’, ‘r’, ‘t’, ‘w’, ‘y’}.

Каждый элемент многократно не может входить в множество, а порядок их объявления не имеет значения.

Пример 3

A = {1, 2, 3}

B = {3, 2, 3, 1}

print(A == B)

выведет `True`, так как A и B — это одни и те же множества.

Каждый элемент может существует только в одном экземпляре. Например, `set('Hello')` создаст множество из четырёх уникальных символов: {‘H’, ‘e’, ‘l’, ‘o’}.

Создание множества

Пример 4

     a_set = {1} # (1)

     a_set

{1}

     type(a_set) # (2)

<class 'set'>

     a_set = {1, 2} # (3)

     a_set

{1, 2}

Чтобы создать множество с единственным значением, используются фигурные скобки ({}). Множества реализованы как классы. Для создания множества с несколькими значениями необходимо отделить их запятыми, поместив в фигурные скобки.

Создание множество на основе списка

Пример 5

     a_list = ['a', 'b', 'mpilgrim', True, False, 42]

     a_set = set(a_list) # (1)

     a_set # (2)

{'a', False, 'b', True, 'mpilgrim', 42}

Добавляя элементы в множество, порядок добавления не сохраняется.

Создание пустого множества

Пример 6

     a_set = set() # (1)

     a_set # (2)

set()

     type(a_set) # (3)

<class 'set'>

     len(a_set) # (4)

0

Использование `{}` создаст пустой словарь:

Пример 7

     not_sure = {}

     type(not_sure)

<class 'dict'>

Чтобы получить пустое множество, необходимо вызвать `set()` без аргументов. Печать пустого множества может показаться странной, так как ожидалось увидеть `{}`, однако это означает пустой словарь, а не множество. Несмотря на это, это действительно пустое множество, не содержащее никаких элементов. В Python 2 нельзя было создать пустое множество с помощью двух фигурных скобок, так как они создают пустой словарь.

Изменение множества

Чтобы добавить элементы в уже существующее множество, используются методы `add()` и `update()`.

  • Метод `add()` принимает один аргумент любого типа и добавляет его в множество. Однако если использовать уже существующее значение, оно просто игнорируется, так как множества содержат только уникальные значения.
  • Метод `update()` принимает множество или список в качестве аргумента и добавляет все его элементы в исходное множество.

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

Существует несколько методов для удаления элементов из множества: `discard()` и `remove()`.

  • Метод `discard()` удаляет значение, переданное ему в качестве аргумента, из множества. Если это значение отсутствует, никаких действий не произойдет.
  • Метод `remove()`, в свою очередь, тоже удаляет значение, но если его нет в множестве, вызывается исключение `KeyError`.
  • Как и списки, множества имеют метод `pop()`. Метод `pop()` удаляет произвольный элемент и возвращает его. В пустом множестве операция `pop()` вызовет исключение `KeyError`. Метод `clear()` удаляет все элементы, оставляя пустое множество, что эквивалентно вызову `a_set = set()`.

    Множества в логическом контексте

    Возможно использовать множества в логическом контексте, например, в условии `if`:

    Пример 8

         def is_it_true(anything):

         if anything:

              print("да, это истина")

         else:

              print("нет, это ложь")

         is_it_true(set()) # (1)

    нет, это ложь

         is_it_true({'a'}) # (2)

    да, это истина

         is_it_true({False}) # (3)

    да, это истина

    В логическом контексте пустое множество считается ложным, тогда как любое непустое множество — истинным.

    Работа с элементами множеств

    Чтобы узнать количество элементов в множестве, используется функция `len`, как и в случае с массивами или строками. Например, `len(C)`.

    Для проверки принадлежности элемента множеству применяется оператор `in`, который возвращает значение типа bool (True или False): ```i in A```.

    Существует также обратный оператор `not in`. Для добавления элемента в множество применяется метод `add`: ```A.add(x)```.

    Элементы можно удалять с помощью двух методов:

    • `discard`
    • `remove`.

    Их поведение различается в том случае, если удаляемый элемент отсутствует в множестве: `discard` в этом случае не делает ничего, а `remove` вызовет исключение `KeyError`.

    Метод `pop` удаляет случайный элемент из множества и возвращает его значение. Если множество пусто, произойдёт исключение `KeyError`.

    Чтобы преобразовать множество в список, можно использовать функцию `list`.

    Перебор элементов множества

    С помощью цикла `for` возможно перебрать все элементы множества:

    Пример 9

    Primes = {2, 3, 5, 7, 11}

    for num in Primes:

         print(num)

    Таблица ключевых операций с множествами

    В Python можно выполнять стандартные математические операции с множествами. Ниже приведены их варианты:

    Операция Описание
     `A | B` `A.union(B)` - возвращает множество, являющееся объединением A и B.
    `A |= B` `A.update(B)` - добавляет в A все элементы из B.
    `A & B` `A.intersection(B)` - возвращает пересечение множеств A и B.
    `A &= B` `A.intersection_update(B)`  - сохраняет в A только элементы, которые есть в B.
    `A - B` `A.difference(B)` - возвращает элементы, входящие в A, но не входящие в B.
    `A -= B` `A.difference_update(B)` &mdash; удаляет из A элементы, находящиеся в B.
    `A ^ B` `A.symmetric_difference(B)` - возвращает элементы, входящие только в A или только в B, но не в оба.
    `A ^= B` `A.symmetric_difference_update(B)` - обновляет A до симметрической разности A и B.
    `A <= B` `A.issubset(B)` - возвращает True, если A является подмножеством B.
    `A >= B` `A.issuperset(B)` - возвращает True, если A является надмножеством B.
    `A < B` эквивалентно `A <= B and A != B`.
    `A > B` эквивалентно `A >= B and A != B`.

    При использовании метода `A.update(B)` и подобного, параметр B может быть и списком, строкой или любым другим итерируемым объектом.

    Пример 10

    Запись `A.update([1, 2, 1])` корректна (в множество добавятся элементы 1 и 2), тогда как `A |= [1, 2, 1]` вызовет исключение.

    Навигация по статьям

    Выполненные работы по программированию
  • Программирование

    НИР на тему Автоматизированое рабочее места специалиста по социальной работе

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      25 февраля 2020

    • Стоимость:

      1 900 руб.

    Заказать такую же работу
  • Программирование

    Сравнительный анализ Python и других языков программирования на примере одной из синтаксических конструкций.

    • Вид работы:

      Эссе

    • Выполнена:

      14 февраля 2020

    • Стоимость:

      1 400 руб.

    Заказать такую же работу
  • Программирование

    Обеспечение защиты информации при использовании системы электронного документооборота

    • Вид работы:

      Реферат

    • Выполнена:

      29 декабря 2019

    • Стоимость:

      500 руб.

    Заказать такую же работу
  • Программирование

    То, что происходит с Россией с 1991 года, назвать реформами никак нельзя. Это не что иное, как революция свер

    • Вид работы:

      Эссе

    • Выполнена:

      16 декабря 2019

    • Стоимость:

      400 руб.

    Заказать такую же работу
  • Программирование

    Искусственный интеллект. Достижения и перспективы развития.

    • Вид работы:

      Эссе

    • Выполнена:

      11 декабря 2019

    • Стоимость:

      800 руб.

    Заказать такую же работу
  • Программирование

    Айти. Заполнить дневник практики.

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      9 декабря 2019

    • Стоимость:

      1 800 руб.

    Заказать такую же работу