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».

  • 0 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 2020 / All rights reserved

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