Share This
Связаться со мной
Крути в низ
Categories
//Множества в Python – объяснение с примерами

Множества в Python – объяснение с примерами

05.11.2021Category : Python

Если вы новичок в Python, то, скорее всего, уже сталкивались со списками. Однако слышали ли вы про множества в Python?

В этой статье мы рассмотрим, что такое множества, как их создавать и какие операции с ними можно совершать.

Что такое множества в Python?

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

Другими словами, множество – это изменяемая неупорядоченная группа элементов, в которой сами элементы неизменяемы.

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

mnozhestva v python objasnenie s primerami 13be070 - Множества в Python – объяснение с примерами

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

Как создать множество

Наиболее распространенный способ создания множества в Python – использование встроенной функции set().

first_set = set(("Connor", 32, (1, 2, 3))) first_set # {32, 'Connor', (1, 2, 3)}  second_set = set("Connor") second_set # {'n', 'C', 'r', 'o'}

Вы также можете создавать множества, используя синтаксис фигурных скобок {}:

third_set = {"Apples", ("Bananas", "Oranges")} type(third_set) # <class 'set'>

Функция set() принимает итерируемый объект и возвращает список объектов, которые будут вставлены в множество. При помощи синтаксиса {} в множество вставляются объекты, взятые в фигурные скобки.

Независимо от способа создания множества каждый его элемент должен быть неизменяемым объектом. Поэтому, если вы добавите список в множество, то столкнетесь с ошибкой, ведь списки изменяемы:

incorrect_set = {"Apples", ["Bananas", "Oranges"]} # Traceback (most recent call last): #   File "<stdin>", line 1, in <module> # TypeError: unhashable type: 'list'

Как добавить или удалить элемент из множества

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

Вот пример добавления элементов в множество с помощью функции update().

add_set = set((1, 2, 3, 4)) add_set # {1, 2, 3, 4}  add_set.update((1,)) add_set # {1, 2, 3, 4} add_set.update(("cello", "violin")) add_set # {1, 2, 3, 4, 'violin', 'cello'}

Но обратите внимание: если мы попытаемся добавить в множество cello — элемент, который уже есть в множестве, — ничего не поменяется:

add_set.update(("cello",)) add_Set # {1, 2, 3, 4, 'violin', 'cello'}

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

А вот так можно удалить элементы из множества:

sub_set = add_set sub_set.remove("violin") sub_set # {1, 2, 3, 4, 'cello'}

Функция remove(x) удаляет элемент x из множества. Если же элемента x нет в множестве, то функция возвращает KeyError:

sub_set.remove("guitar") # Traceback (most recent call last): #   File "<stdin>", line 1, in <module> # KeyError: 'guitar

Есть еще пара способов удалить элемент из множества:

  • метод discard(x) удаляет элемент x из множества, но не возвращает никаких ошибок, если x отсутствует в множестве
  • pop() удаляет и возвращает случайный элемент из множества
  • метод clear() удаляет все элементы из множества

Вот несколько примеров для иллюстрации и лучшего понимания:

m_set = set((1, 2, 3, 4))   m_set.discard(5) # Цифры 5 в множестве нет, но ошибка не возникает  m_set.pop() # 4 m_set # {1, 2, 3}  m_set.clear() m_set # set()

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

Если вы помните основы математики в старшей школе, вы, вероятно, вспомните такие математические операции над множеством, как объединение, пересечение, разность и симметричная разность. Что ж, те же самые операции применимы и ко множествам в Python.

1. Объединение множеств

Результат объединения двух множеств – это множество всех элементов из обоих множеств без дубликатов. Для объединения множеств в Python используется метод union() или оператор |.

first_set = {1, 2, 3} second_set = {3, 4, 5} first_set.union(second_set) # {1, 2, 3, 4, 5}  first_set | second_set     # использование оператора `|` # {1, 2, 3, 4, 5}

2. Пересечение множеств

Результат пересечения двух множеств – это множество всех общих элементов из обоих множеств. Для получения пересечения можно использовать метод crossction() или оператор &.

first_set = {1, 2, 3, 4, 5, 6} second_set = {4, 5, 6, 7, 8, 9} first_set.intersection(second_set) # {4, 5, 6}  first_set & second_set     # использование оператора `&`  # {4, 5, 6}

3. Разность множеств

Разность двух множеств – множество из всех элементов первого множества, которых нет во втором множестве. Для получения разности можно использовать метод difference() или оператор -. Чтобы было понятнее, как работает данная операция, внимательно изучите пример:

first_set = {1, 2, 3, 4, 5, 6} second_set = {4, 5, 6, 7, 8, 9} first_set.difference(second_set) # {1, 2, 3}  first_set - second_set     # использование оператора `-`  # {1, 2, 3}  second_set - first_set # {8, 9, 7}

4. Симметричная разность

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

Для этой операции вы можете использовать метод symric_difference() или оператор ^.

first_set = {1, 2, 3, 4, 5, 6} second_set = {4, 5, 6, 7, 8, 9} first_set.symmetric_difference(second_set) # {1, 2, 3, 7, 8, 9}  first_set ^ second_set     # использование оператора `^` # {1, 2, 3, 7, 8, 9}

Как изменить множество с помощью операций

Каждая из операций над множествами, которые мы обсуждали выше, может использоваться для изменения существующего множества в Python.

Для обновления значения переменной можно использовать расширенный синтаксис присваивания, такой как += или *=. Со множествами это тоже работает:

a = {1, 2, 3, 4, 5, 6} b = {4, 5, 6, 7, 8, 9}  a.update(b)          # объединение a # {1, 2, 3, 4, 5, 6, 7, 8, 9}  a &= b               # пересечение a # {4, 5, 6, 7, 8, 9}  a -= set((7, 8, 9))  # разность a # {4, 5, 6}  a ^= b               # симметричная разность a # {7, 8, 9}

Другие операции над множествами в Python

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

  • a.issubset(b) или оператор <= возвращает True, если a является подмножеством b
  • a.issuperset(b) или оператор >= возвращает True, если a является надмножеством b
  • a.isdisjoint(b) возвращает True, если в множествах a и b нет общих элементов

Frozenset или неизменяемые множества в Python

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

Python позволяет вам обойти это, используя вместо обычного множества frozenset. У него есть все свойства множества, за исключением того, что он неизменяемый (это означает, что добавлять или удалять элементы из frozenset нельзя). Он также является хешируемым, поэтому его можно использовать в качестве ключей к словарю.

Тип данных frozenset обладает всеми методами обычного множества (например, difference(), symric_difference() или union()), но поскольку он неизменяемый, у него нет методов для добавления и удаления элементов.

a = frozenset((1, 2, 3, 4)) b = frozenset((3, 4, 5, 6))  a.issubset(b) # False a.update(b)    # raises an error # Traceback (most recent call last): #   File "<stdin>", line 1, in <module> # AttributeError: 'frozenset' object has no attribute 'update'

Использовать же неизменяемое множество в качестве ключей словаря крайне просто:

a = frozenset((1, 2, 3, 4)) b = frozenset(("w", "x", "y", "z"))  d = {a: "hello", b: "world"} d # {frozenset({1, 2, 3, 4}): 'hello', frozenset({'w', 'x', 'y', 'z'}): 'world'}

Заключение

Вот и все! В этой статье мы рассмотрели такой тип данных, как множества: что они собой представляют, как их создавать и как работать с ними. Также мы на примерах разобрали различные операции над множествами.

Освоив множества, вы сможете покорить большинство встроенных функций в Python. Все, что вам нужно сейчас – это практика. Удачи и успехов в написании кода!

Перевод статьи «Python Sets – Explained with Examples».

  • 2 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close