popov . dev

Главная

Библиотека

Статьи

Как использовать...

Как использовать множества (set) в Python на примерах

Хранение данных - это потребность практически каждой области в современном мире. Python предоставляет различные типы структур данных для организации ваших данных, и эти структуры данных являются неотъемлемой частью пути по изучению Python. Среди всех структур данных, доступных в Python, некоторые являются изменяемыми, а некоторые - неизменяемыми. В этой статье мы подробно рассмотрим множества (set) и неизменяемые множества (frozen set). Множества в Python - это изменяемые, повторяющиеся и неупорядоченные структуры данных. В данной статье мы рассмотрим:

  1. Что такое множества?
  2. Когда их использовать
  3. Создание множества
  4. Операции со множествами
  5. Что такое неизменяемые множества

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

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

Пример

My_Set={1, 's', 7.8} 
print(My_Set)

Вывод

{1, 's', 7.8}
Примечание: Set в целом является изменяемым, но его элементы - нет.

Когда использовать множества?

Мы используем set когда нам:

  1. Порядок элементов не имеет значения
  2. Необходимо исключить повторение элементов
  3. нужно выполнить математические операции, такие как объединение, пересечение и другие

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

Есть два способа для создания множеств:

В первом способе, перечисление элементов мы помещаем в фигурные скобки:

My_Set={1, 's', 7.8}
print(My_Set)

Во втором способе мы используем ключевое слово set для создание множества:

a = set({1, 'b', 6.9})
print(a)

С помощью данного ключевого слова, вы можете создать пустое множество:

Empty_Set = set() 
print(Empty_Set)

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

С множествами можно выполнять ряд операций, таких как добавление элементов, удаление элементов, определение длины набора и т.д. Чтобы узнать, какие методы можно использовать для них, вы можете воспользоваться функцией dir().

 My_Set = {1, 's', 7.8} 
dir(My_Set)

В выводе получим список операций:

[‘__and__’,’__class__’,’__contains__’,’__delattr__’,’__dir__’,’__doc__’,
’__eq__’,’__format__’,’__ge__’,’__getattribute__’, ‘__gt__’, ‘__hash__’,
‘__iand__’, ‘__init__’, ‘__init_subclass__’, ‘__ior__’, ‘__isub__’, ‘__iter__’,
‘__ixor__’, ‘__le__’, ‘__len__’, ‘__lt__’, ‘__ne__’, ‘__new__’, ‘__or__’,
‘__rand__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__ror__’,
‘__rsub__’, ‘__rxor__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__sub__’,
‘__subclasshook__’, ‘__xor__’, ‘add’, ‘clear’, ‘copy’, ‘difference’,
‘difference_update’, ‘discard’, ‘intersection’, ‘intersection_update’,
‘isdisjoint’, ‘issubset’, ‘issuperset’, ‘pop’, ‘remove’,
‘symmetric_difference’, ‘symmetric_difference_update’,
‘union’, ‘update’]

Рассмотрим подробнее важные операции из этого списка.

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

Чтобы определить длину множества в Python, вы можете использовать функцию len(). Эта функция принимает имя множества в качестве параметра и возвращает целое значение, равное количеству элементов, присутствующих в нем.

 len(My_Set) # Вывод: 3

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

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

for x in My_Set:
    print(x)

Вывод:

s
1
7.8

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

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

Элементы могут быть добавлены в множество с помощью двух функций: add() и update().

My_Set.add(3)
My_Set.update([2, 4.6, 1, 'r'])

Если нам необходимо добавить один элемент, то мы используем метод add(), если несколько элементов, тогда лучше воспользоваться update().

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

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

Функция remove() принимает один параметр, который является элементом для удаления из множества.

My_Set={1, 2, 4.6, 7.8, 'r', 's'}
My_Set.remove(2)
print(My_Set)

Вывод

{1, 4.6, 7.8, 'r', 's'}

Как вы можете видеть, число 2 было удален из множества с помощью функции remove(). Если вы укажете в качестве параметра для remove() какой-либо элемент, которого нет в наборе, это приведет к ошибке.

Допустим, если вы хотите удалить какой-либо элемент из множества и вы не уверены, действительно ли этот элемент присутствует в множества или нет, вы можете использовать функцию discard(). Эта функция принимает элемент, который должен быть удален из множества, в качестве параметра, но в случае, если элемент отсутствует, она не выдает ошибку.

My_Set = {1, 2, 4.6, 7.8, 'r', 's'}
My_Set.discard(4.6)
My_Set.discard('i')
print(My_Set) # Вывод: {1, 2, 7.8, ‘r’, ‘s’}

Приведенный выше вывод показывает, что элемент 4.6 был удален из My_Set, но функция discard() не выдала ошибку, когда использовали My_Set.discard('i'), хотя i отсутствует в множестве.

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

My_Set={1, 2, 4.6, 7.8, 'r', 's'}
My_Set.pop()
print(My_Set)

Вывод

{2, 4.6, 7.8, 'r', 's'}

Вывод показывает, что с помощью функции pop() был удален случайный элемент, который в данном случае 1.

Если вам надо удалить все элементы, присутствующие в множестве, вы можете использовать метод clear().

My_Set={1, 2, 4.6, 7.8, 'r', 's'}
My_Set.clear()
print(My_Set) 

Вывод

 set()

Как вы можете видеть из приведенного выше вывода, My_Set - это пустое множество. Если вы хотите полностью удалить множество, вы можете использовать ключевое слово del.

My_Set={1, 2, 4.6, 7.8, 'r', 's'}
del My_Set
print(My_Set)

Данные код выведет ошибку, поскольку во второй строке примера мы удалили не только содержимое, но и саму переменную с множеством.

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

Объединение множеств - это объединение двух или более множеств в одно, путем добавления всех уникальных элементов, присутствующих в обоих множествах. Это можно сделать двумя способами. В первом случае нам нужно использовать символ прямой черты (pipeline) |:

a={1, 2, 4.6, 7.8, 'r', 's'}
b={2,5,'d','abc'}
c=a|b
print(a|b)

Вывод

{1, 2, 4.6, 5, 7.8, 'r', 'abc', 's', 'd'}

Как вы можете видеть, в приведенном выше выводе объединение множеств a и b сохраняется в новом множестве c. Вы также можете объединить более двух множеств:

a={1, 2, 4.6, 7.8, 'r', 's'}
b={2,5,'d','abc'}
c={2,3,4,5}
d=a|b|c
print(d)

Вывод

{1, 2, 3, 4, 4.6, 5, 7.8, 'abc', 'd', 'r', 's'}

Чтобы объединить два или более наборов, вы можете использовать второй способ с методом union():

a = {1, 2, 4.6, 7.8, 'r', 's'}
b = {2, 5, 'd', 'abc'}
c = {'m', 23, 76, 4.7}
print("Множество a + b = ", a.union(b))
print("Множество a + b + c = ", a.union(b, c))

Вывод

Множество a + b =  {'r', 1, 2, 4.6, 5, 7.8, 'abc', 's', 'd'}
Множество a + b + c =  {'r', 1, 2, 4.6, 5, 4.7, 7.8, 'abc', 76, 23, 's', 'd', 'm'}

Приведенный выше результат показывает, что d является объединением множеств a, b и c.

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

Пересечение двух или более множеств - это новое множество, состоящее только из общих элементов, присутствующих в этих множествах. Есть два способа выполнения операции пересечения. В первом способе используя символ амперсанда &:

a = {1, 2, 5, 4.6, 7.8, 'r', 's'}
b = {2, 5, 'd', 'abc'}
c = {2, 3, 4}
print(a&b)
print(a&b&c)

Вывод

{2, 5}
{2}

Второй способ заключается в использовании функции intersection():

a = {1, 2, 5, 4.6, 7.8, 'r', 's'}
b = {2, 5, 'd', 'abc'}
c = {2, 3, 4}
print("Множество из пересечения a и b = ", a.intersection(b))
print("Множество из пересечения b и c = ", a.intersection(b, c))

Вывод

Множество из пересечения a и b =  {2, 5}
Множество из пересечения b и c =  {2}

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

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

a = {1, 2, 5, 4.6, 7.8, 'r', 's'}
b = {2, 5, 'd', 'abc'}
c = {2, 3, 4}
print(a - b - c)

Вывод

{'r', 1, 4.6, 7.8, 's'}

Второй способ заключается в использовании функции difference()

a = {1, 2, 5, 4.6, 7.8, 'r', 's'}
b = {2, 5, 'd', 'abc'}
c = {2, 3, 4}
print("Разность a и b = ", a.difference(b))
print("Разность a, b и c = ", a.difference(b, c))

Вывод

Разность a и b =  {'r', 1, 4.6, 7.8, 's'}
Разность a, b и c =  {'r', 1, 4.6, 7.8, 's'}

А если нам вообще нет необходимости менять элементы множества мы можем воспользоваться неизменяемыми множествами (frozen set), о которых речь пойдет ниже.

Что такое неизменяемые множества?

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

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

Неизменяемые множества могут быть созданы с помощью метода frozenset(). Эта функция принимает любые элементы и преобразует их в неизменяемые

a = {1, 2, 5, 4.6, 7.8, 'r', 's'}
b = frozenset(a)
print(b)

Вывод

frozenset({'r', 1, 2, 4.6, 5, 7.8, 's'})

Доступ к элементам неизменяемого множества

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

b = frozenset([1, 2, 4.6, 5, 7.8, 'r', 's'])
for x in b:
    print(x)

Вывод

r
1
2
4.6
5
7.8
s

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

Неизменяемые множества являются неизменяемыми, поэтому вы не можете выполнять такие операции, как add(), remove(), update() и т.д.

Комментарии

Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте