Множества (set) в Python

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

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

thisset = {«set», «list», «tuple»}

print(thisset)

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

{‘set’, ‘tuple’, ‘list’}

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

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

thisset = {«set», «list», «tuple», «list»}

print(thisset)

Это код неправильной программы, которая содержит два слова list, которые при выводе записываются, как одно.

{‘set’, ‘tuple’, ‘list’}

Осуществление доступа к элементам множества

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

Тем не менее, множество – это итерируемый объект. Следовательно, пользователь может использовать цикл for для того, чтобы пройтись по его элементам. Также можно проверять наличие элемента в множестве с помощью оператора in или not in.

Логика этих операторов противоположная. Первый возвращает True, если элемент входит в состав множества. А второй – если не входит. 

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

thisset = {"set", "list", "tuple"}

for x in thisset:  

    print(x)

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

 set

list

tuple

А теперь давайте проверим, имеется ли «dict» в этой последовательности.  

thisset = {"set", "list", "tuple"}

print("dict" in thisset)

Поскольку этого элемента в ней нет, то выводится значение False. Если бы мы использовали оператор not in, то тогда бы на вывод пошло True

thisset = {"set", "list", "tuple"}

print("dict" not in thisset)


True.

Редактирование элементов множества

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

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

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

thisset = {"set", "list", "tuple"}

thisset.add("dict")  

print(thisset)

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

{‘tuple’, ‘set’, ‘list’, ‘dict’}

Теперь приведем фрагмент кода, демонстрирующего использование метода update() для добавления нескольких элементов во множество с названием, указанным выше. 

thisset = {"set", "list", "tuple"}

thisset.update(["dict",  "class",  "int"])

print(thisset)

Этот код работает следующим образом. Сначала объявляется множество с названием thisset. Ему присваивается три элемента – “set”, “list”, “tuple». После этого используется метод update() и в качестве аргументов указываются новые элементы, которые добавляются к множеству. После этого программа выводит обновленное множество в консоль. 

Если запустить это приложение, то в консоли появится следующая строка.

{‘dict’, ‘tuple’, ‘set’, ‘list’, ‘class’, ‘int’}

Получение длины множества

Здесь все выполняется таким же образом, как и в других итерируемых объектах. Для получения длины множества используется метод len(). В качестве аргумента используется название переменной, которой присвоен объект множества. 

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

thisset = {"set", "list", "tuple"}

print(len(thisset))

На вывод отправится цифра 3. Ведь общее количество элементов, которые входят в его состав – 3.

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

Для удаления элементов множества необходимо воспользоваться одним из двух методов: remove() и discard(). С помощью метода remove() уберем элемент list из множества. Для этого необходимо указать название соответствующего элемента. 

thisset = {"set", "list", "tuple"}

thisset.remove("list")  

print(thisset)

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

Обратите внимание, что теперь она будет выводить не первоначальный объект, а тот, в котором были осуществлены соответствующие изменения.

То есть, на вывод пойдет.

{‘tuple’, ‘set’}

Внимание! Если элемента, который требуется удалить, нет в наличии, то тогда будет вызвана ошибка при использовании функции remove()

Также можно использовать метод discard для удаления элемента. Работает он точно таким же способом, как и предыдущий. В качестве аргумента используется значение, которое необходимо удалить. 

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

thisset = {"set", "list", "tuple"}

thisset.discard("list")  

print(thisset)

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

{‘tuple’, ‘set’}

Здесь может появиться вопрос: в чем же отличия метода remove() и discard(). Все дело в том, что первый вызывает ошибку, если элемента не оказывается. А вот последний просто пытается сделать то, что ему предписано. Если не получается – ничего не происходит, программа продолжает работать, как будто этого элемента и не было. 

Еще один метод, который можно использовать с различными итерируемыми объектами – pop(). Множества здесь – не исключение. Правда, нюанс есть. Поскольку это – неупорядоченный набор данных, то вы не знаете, какой элемент удаляете. То есть, здесь он фактически удалит случайный объект. 

Учитывая эту информацию, необходимо тщательно подумать перед тем, как использовать данный метод. 

thisset = {"set", "list", "tuple"}

x =  thisset.pop()  

print(x)  

print(thisset)

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

Если нужно очистить множество, можно воспользоваться методом clear(). Он удалит все содержимое нужного итерируемого объекта. 

thisset = {"set", "list", "tuple"}

thisset.clear()  

print(thisset)

Строка, которая выводится, будет содержать только одно слово set(). То есть, то, что это – множество. Но, поскольку в нем никаких больше значений содержаться не будет, скобки будут пустые. Таким способом приложение уведомляет о том, что этот объект являет собой множество, но не содержит элементов.

Использование конструктора set() для создания множества

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

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

thisset = set(("set", "list", "tuple"))  # Используем двойные скобки

print(thisset)

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

Строка, которая будет выводиться приложением – {‘set’, ‘tuple’, ‘list’}

Элемент Frozenset

Если перевести название этого элемента дословно, то получится «Замороженное множество», что очень хорошо отражает его название.

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

И приводим фрагмент кода для примера.  

>>> a = set('qwerty')

>>> b = frozenset('qwerty')

>>> a == b

True

>>> True

True

>>> type(a - b)

<class 'set'>

>>> type(a | b)

<class 'set'>

>>> a.add(1)

>>> b.add(1)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'frozenset' object has no attribute 'add'

Видим, что здесь выдается ошибка AttributeError, которая означает, что такого метода этот объект не имеет. Чтобы объявить такой элемент, не используется специальных обозначений. Поэтому необходимо воспользоваться конструктором frozenset().

Методы, используемые с объектом Set

Чтобы работать с множествами, в Python существует целый спектр методов. Рассмотрим некоторые из них подробнее.

add(x). Добавляет те элементы, которые используются в качестве аргумента, в множество. 

clear(). Убирает абсолютно все элементы из множества. 

copy(). Создает новое множество с таким же содержимым. 

x.difference(y). Определяет, какие элементы есть в x, но отсутствуют в y, а потом возвращает соответствующее множество.

x.difference_update(y). Удаляет те элементы, которые содержатся в x и y.

discard(x). Убирает элемент, который указывается в качестве аргумента этой функции.

x.intersection(y). Возвращает множество, которое находится на пересечении x и y.

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

ОфисГуру
Adblock
detector