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

На этом занятии поговорим о новом типе данных в Python – множестве (set). По определению:

Множество (set) – это неупорядоченная коллекция уникальных элементов.

То есть коллекция, в которой отсутствуют дублирующие значения. Для создания множества используется следующий синтаксис:

{значение1, значение2, …, значениеN}

Например:

a={1,2,3,"hello"}

Выведем в консоль эту коллекцию и ее тип:

print(a, type(a))

Увидим:

{1, 2, 3, 'hello'} <class 'set'>

Это объявление очень похоже на словарь. Только в словаре мы помимо значений еще указывали ключи. Здесь же ключей нет – только значения. Причем, если мы попробуем добавить туда вот такие повторяющиеся значения:

a={1,2,3,"hello", 2,3, "hello"}

то они будут проигнорированы:

{1, 2, 3, 'hello'}

И это ключевая особенность работы этой коллекции: она автоматически отбрасывает все дубли.

В качестве значений множества можно использовать любой неизменяемый тип: числа, строки, кортежи. Например:

a={1,1,"hi","hi",("a","b"), ("a","b")}

получим результат:

{'hi', 1, ('a', 'b')}

Также множества можно создавать с помощью специальной функции set:

b=set()

или, указать в качестве аргумента любой итерируемый объект:

b=set("hello world!")
b=set([1,1,2,3,5,3,2,1])

или даже функцию range:

b=set(range(7))

Обратите внимание, если попытаться создать пустое множество вот так:

b={}

то получим не пустое множество, а пустой словарь! Пустое множество создается именно с помощью функции set:

b=set()

Как можно использовать множества в программах? Например, если нам нужно из списка удалить все дубли:

a=[1,2,3,43,2,4,3,2,1]

мы можем его сначала превратить в множество из уникальных значений:

b=set(a)

а, затем, обратно в список, используя функцию list:

a=list(b)

Видите, как эту операцию можно просто реализовать на Python. Причем, две последние операции можно объединить в одну вот так:

a=list(set(a))

Элементы множества можно обходить с помощью оператора цикла for:

setA = {7,6,5,4,3}
for x in setA:
   print(x)

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

setA[0]

приведет к ошибке.

Методы добавления/удаления элементов в множестве

Для добавления элемента в множество используется метод add:

b.add(7)

И, так как множества – это изменяемый тип данных, то этот метод сразу добавит этот элемент, если такого еще нет. То есть, если мы попробуем добавить 7 еще раз:

b.add(7)

то множество не изменится.

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

b.update(["a", "b", (1,2)])

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

b.update("abrakadabra")

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

Для удаления элемента по значению используется метод discard:

b.discard(2)

Если еще раз попытаться удалить двойку:

b.discard(2)

то ничего не произойдет и множество не изменится.

Другой метод для удаления элемента по значению – remove:

b.remove(4)

но при повторном таком вызове:

b.remove(4)

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

Также удалять элементы можно и с помощью метода pop:

b.pop()

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

c=set()
c.pop()

Наконец, если нужно просто удалить все элементы из множества, то используется метод:

b.clear()

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

Видео по теме