Множества в Python set () Примеры

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

Прежде всего, это такие моменты:

  1. Множества не содержат дубликатов.
  2. Составляющие множества неизменные по своей природе. Тем не менее сам по себе объект, принадлежащий к этому типу данных, является изменяемым объектом.
  3. Поскольку составляющие множеств не имеют собственных индексов, во множества не встроены операции, связанные с обращением к индексу или нескольким индексам (то бишь, к срезу).

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

Как создавать множества с помощью Python?

Вообще, множества создаются несколькими методами. Например, можно передать все составляющие внутрь фигурных скобок, а все элементы разделить запятыми. Множество включает какое-угодно число элементов, которые бывают различных типов. То есть, нет разницы, вы будете использовать в фигурных скобках целочисленные значения, строки, кортежи. Все эти типы данных будут поддерживаться.

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

Давайте рассмотрим один вариант создания множества средствами языка Python. 

num_set = {1, 2, 3, 4, 5, 6}  

print(num_set)

Результат получаем такой:

{1, 2, 3, 4, 5, 6}

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

А теперь давайте попробуем создать множество из строковых значений.  

string_set = {"Nicholas", "Michelle", "John", "Mercy"}  

print(string_set)

Результат получаем следующий:

{‘Michelle’, ‘Nicholas’, ‘John’, ‘Mercy’}

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

Также можно создать множество с элементами, относящимся к разным типам. Например. 

mixed_set = {2.0, "Nicholas", (1, 2, 3)}  

print(mixed_set)

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

{2.0, ‘Nicholas’, (1, 2, 3)}

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

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

num_set = set([1, 2, 3, 4, 5, 6])  

print(num_set)

Результат:

{1, 2, 3, 4, 5, 6}

Как мы уже говорили ранее. множества не включают дубликатов. Допустим, мы в множество передадим список с дубликатами элементов. 

num_set = set([1, 2, 3, 1, 2])  

print(num_set)

Попробуем выполнить этот код.

{1, 2, 3}

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

num_set = {1, 2, 3, 1, 2}  

print(num_set)

Результат мы получаем следующий.

 {1, 2, 3}

Обратите внимание, что здесь также были удалены дубликаты. Необходимо учитывать этот момент при разработке приложений на Python.

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

 x = {}

print(type(x))

Результат.

<class ‘dict’>

Как показано в выдаче, тип переменной x – словарь.

Для создания пустого множества в Python, необходимо использовать функцию set() без передачи какого-либо значения в параметрах. В общем, смотрите на пример. 

x = set()  

print(type(x))

Результат получается таким.

<class ‘set’>

Видим, что приложение нам сигнализирует о том, что переменная x хранит множество.

Доступ к элементам множеств

У Python нет непосредственного метода получения значения отдельных элементов множества. Тем не менее у нас есть возможность использовать цикл для того, чтобы пройтись по всем элементам. Например, так. 

months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"])

for m in months:  

    print(m)

Результат после выполнения этого кода будет следующим.

March  

Feb  

Dec  

Jan  

May  

Nov  

Oct  

Apr  

June  

Aug  

Sep  

July

Также можно проверить наличие элемента во множество с помощью in, как показано ниже. 

months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"])

print("May" in months)

Выполним фрагмент кода, который содержит данный оператор:

True

Почему было возвращено значение True? Дело в том, что элемент был найден во множестве, и этот факт подтвердил оператор in. Соответственно, если пытаться найти элемент, который отсутствует во множестве, будет получено значение False.  

months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]) 

print("Nicholas" in months) # False

Если выполнить этот код, то увидим, что будет возвращено значение False.

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

Python – это язык программирования, который позволяет вносить новые элементы во множество с помощью функции add(). Пример кода. 

months = set(["Jan", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"])

months.add("Feb")

print(months)

Результат:

{‘Oct’, ‘Dec’, ‘Feb’, ‘July’, ‘May’, ‘Jan’, ‘June’, ‘March’, ‘Sep’, ‘Aug’, ‘Nov’, ‘Apr’}

Элемент Feb успешно внесен во множество. Если это было множество чисел, мы не можем передавать новый элемент внутри скобок, как это делается для строк. Например. 

num_set = {1, 2, 3}  

num_set.add(4)  

print(num_set)

Результат:

{1, 2, 3, 4}

А теперь поговорим о том, как удалять элементы из множеств.

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

Python имеет функционал, позволяющий удалять элементы из множеств. Правда, поскольку элементы не индексируются, делается это по-другому по сравнению с другими итерируемыми объектами. Для этого можно использовать один из методов discard() или remove().

Учтите то, что discard() не выдает ошибку, если элемент не будет найден во множестве. А вот если попробовать удалить несуществующий элемент с помощью метода remove(), то будет возвращена ошибка. В этом отличия между данными методами. 

Вот, как это работает на практике. 

num_set = {1, 2, 3, 4, 5, 6}  

num_set.discard(3)  

print(num_set)

Результат:

{1, 2, 4, 5, 6}

Как видим, после использования функции discard() элемент 3 был удален из множества.

Аналогично, приведем пример использования метода remove()

num_set = {1, 2, 3, 4, 5, 6}  

num_set.remove(3)  

print(num_set)

Результат:

{1, 2, 4, 5, 6}

Теперь попробуем удалить элемент, который отсутствует во множестве. Для начала используем метод discard()

num_set = {1, 2, 3, 4, 5, 6}  

num_set.discard(7)  

print(num_set)

Если выполнить этот код, получим такой результат:

{1, 2, 3, 4, 5, 6}

А теперь давайте попробуем выполнить аналогичное действие с помощью метода remove()

num_set = {1, 2, 3, 4, 5, 6}  

num_set.remove(7)  

print(num_set)

В результате, мы получаем следующее значение. 

Traceback (most recent call last):  

  File "C:\Users\admin\sets.py", line 2, in <module>

    num_set.remove(7)

KeyError: 7

В выдаче мы видим, что была возвращена ошибка KeyError, которая означает проблемы при удалении элемента, отсутствующего во множестве. 

С помощью метода pop(), мы можем удалить и вернуть элемент. Поскольку элементы располагаются в произвольном порядке, мы не можем заранее узнать, какой элемент будет удален. 

num_set = {1, 2, 3, 4, 5, 6}  

print(num_set.pop())

В нашем случае было удалено значение 1. Но с такой же вероятностью могли бы быть удалены цифры 2, 3, 4, и так далее.

Этот же метод может использоваться для того, чтобы возвращать оставшиеся во множестве элементы. Но синтаксис в этом случае будет несколько отличаться. Посмотрите на этот фрагмент кода. 

num_set = {1, 2, 3, 4, 5, 6}  

num_set.pop()  

print(num_set)

Результат:

{2, 3, 4, 5, 6}

Это те элементы, которые остались во множестве после того, как была удалена цифра 1 из него.

Также есть метод clear(), который позволяет удалить все элементы, которые есть во множестве. Например: 

num_set = {1, 2, 3, 4, 5, 6}  

num_set.clear()  

print(num_set)

В качестве результата служит пустой set(), в котором не содержится никаких элементов.

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

Также Python предусматривает возможность объединять множества. Допустим, есть два множества: A, B. После того, как они будут объединены, появится еще одно множество, которое будет содержать значения из каждого.

Делается это с помощью функции union()

months_a = set(["Jan", "Feb", "March", "Apr", "May", "June"])  

months_b = set(["July", "Aug", "Sep", "Oct", "Nov", "Dec"])

all_months = months_a.union(months_b)  

print(all_months)

Результат:

{‘Oct’, ‘Jan’, ‘Nov’, ‘May’, ‘Aug’, ‘Feb’, ‘Sep’, ‘March’, ‘Apr’, ‘Dec’, ‘June’, ‘July’}

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

x = {1, 2, 3}  

y = {4, 5, 6}  

z = {7, 8, 9} 

output = x.union(y, z)

print(output)

Результат:

{1, 2, 3, 4, 5, 6, 7, 8, 9}

Если попробовать объединить множества, дубликаты также будут проигнорированы. Не забываем, что множества не поддерживают дубликаты.  

x = {1, 2, 3}  

y = {4, 3, 6}  

z = {7, 4, 9} 

output = x.union(y, z)

print(output)

Результат выполнения этого фрагмента кода.

{1, 2, 3, 4, 6, 7, 9}

Оператор | может также задействоваться, если надо найти объединение двух либо более множеств. Например: 

months_a = set(["Jan","Feb", "March", "Apr", "May", "June"])  

months_b = set(["July", "Aug", "Sep", "Oct", "Nov", "Dec"])

print(months_a | months_b)

Результат:

{‘Feb’, ‘Apr’, ‘Sep’, ‘Dec’, ‘Nov’, ‘June’, ‘May’, ‘Oct’, ‘Jan’, ‘July’, ‘March’, ‘Aug’}

Если вам необходимо создать объединение из более, чем двух множеств, их названия могут быть разделены с использованием оператора |. Вот так: 

x = {1, 2, 3}  

y = {4, 3, 6}  

z = {7, 4, 9} 

print(x | y | z)

После того, как мы выполним этот код, получим следующий результат.

{1, 2, 3, 4, 6, 7, 9}

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

Допустим, у вас есть два множества: A и B. Их пересечение представляет собой множество элементов, которые для A и B являются общими.

Операция пересечения во множествах может выполняться как с использованием оператора &, так и с использованием метода intersection(). Давайте рассмотрим пример: 

x = {1, 2, 3}  

y = {4, 3, 6} 

print(x & y) # Результат: 3

В каждом из множеств 3 – это общий элемент. Аналогичный результат может быть получен, если используется метод intersection(): 

x = {1, 2, 3}  

y = {4, 3, 6} 

z = x.intersection(y)  

print(z) # Результат: 3

Разница между множествами

Допустим, у вас есть два множества: A и B. И вам надо получить разницу между ними. Что подразумевается под ней? Разница между множествами A и B – это такое множество, в котором содержатся все элементы, которые есть в A, но при этом их нет в B. Следовательно, B – A – это наоборот.

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

Приведем пример: 

 set_a = {1, 2, 3, 4, 5}  

set_b = {4, 5, 6, 7, 8}  

diff_set = set_a.difference(set_b)  

print(diff_set)

Результат:

{1, 2, 3}

В приведенном выше примере кода, лишь первые три элемента множества set_a отсутствуют во множестве set_b, формируя нашу выдачу. 

Как было сказано ранее, для нахождения разницы между множествами также можно использовать оператор –.  

set_a = {1, 2, 3, 4, 5}  

set_b = {4, 5, 6, 7, 8}  

print(set_a - set_b)

Результат:

{1, 2, 3}

Симметричная разница – это что?

Под симметричной разницей между множествами A и B подразумевается такое множество, в котором содержатся элементы, которые есть и в A, и в B, помимо тех, которые есть в каждом из этих множеств.

Чтобы создать симметричную разницу, необходимо воспользоваться оператором ^ или функцией symmetric_difference()

set_a = {1, 2, 3, 4, 5}  

set_b = {4, 5, 6, 7, 8}  

symm_diff = set_a.symmetric_difference(set_b)  

print(symm_diff)

Результат:

{1, 2, 3, 6, 7, 8}

Симметричную разницу можно также найти следующим образом: 

set_a = {1, 2, 3, 4, 5}  

set_b = {4, 5, 6, 7, 8}  

print(set_a ^ set_b)

Результат:

{1, 2, 3, 6, 7, 8}

ОфисГуру
Adblock
detector