На этом занятии поговорим о новом типе данных в Python – множестве (set). По
определению:
Множество (set) – это
неупорядоченная коллекция уникальных элементов.
То есть
коллекция, в которой отсутствуют дублирующие значения. Для создания
множества используется следующий синтаксис:
{значение1,
значение2, …, значениеN}
Например:
Выведем в
консоль эту коллекцию и ее тип:
Увидим:
{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("hello world!")
b=set([1,1,2,3,5,3,2,1])
или даже функцию range:
Обратите
внимание, если попытаться создать пустое множество вот так:
то получим не
пустое множество, а пустой словарь! Пустое множество создается именно с помощью
функции set:
Как можно
использовать множества в программах? Например, если нам нужно из списка удалить
все дубли:
мы можем его
сначала превратить в множество из уникальных значений:
а, затем,
обратно в список, используя функцию list:
Видите, как эту
операцию можно просто реализовать на Python. Причем, две
последние операции можно объединить в одну вот так:
Элементы
множества можно обходить с помощью оператора цикла for:
setA = {7,6,5,4,3}
for x in setA:
print(x)
В результате,
все значения множества будут выведены в консоль. Причем, мы можем перебирать
именно значения множеств, индексов у этих элементов нет, т.к. множество – это
неупорядоченная коллекция. И вот такая операция
приведет к
ошибке.
Методы добавления/удаления элементов в множестве
Для добавления
элемента в множество используется метод add:
И, так как
множества – это изменяемый тип данных, то этот метод сразу добавит этот
элемент, если такого еще нет. То есть, если мы попробуем добавить 7 еще раз:
то множество не
изменится.
Если необходимо
в множество добавить сразу несколько значений, то для этого можно
воспользоваться методом update:
b.update(["a", "b", (1,2)])
В качестве
аргумента мы должны указать итерируемый объект, например, список, значения
которого и будут добавлены в множество, разумеется, с проверкой их
уникальности. Или, так:
Строка – это
тоже итерируемый объект, и ее уникальные символы будут добавлены в множество. И
так далее, в качестве аргумента метода update можно указывать
любой перебираемый объект.
Для удаления
элемента по значению используется метод discard:
Если еще раз
попытаться удалить двойку:
то ничего не
произойдет и множество не изменится.
Другой метод для
удаления элемента по значению – remove:
но при повторном
таком вызове:
возникнет
ошибка, т.к. значение 4 в множестве уже нет. То есть, данный метод возвращает
ошибку при попытке удаления несуществующего значения. Это единственное отличие
в работе этих двух методов.
Также удалять
элементы можно и с помощью метода pop:
При этом он
возвращает удаляемое значение, а сам удаляемый элемент оказывается, в общем-то,
случайным, т.к. множество – это неупорядоченный список. Если вызвать этот метод
для пустого множества, то возникнет ошибка:
Наконец, если
нужно просто удалить все элементы из множества, то используется метод:
На следующем занятии мы продолжим рассматривать множества и поговорим об операциях над них, а также о возможности их сравнения.