Множества это контейнер содержащий уникальные не повторяющиеся
элементы в случайном порядке, обозначается через { }
фигурные
скобки.
Множества записываются в фигурные скобки { }
такие же как
и у словаря, но словари имеют ключи доступа, записываются как
key : value
ключ: значение в то время как у множества ключей нет.
При создании переменной в фигурных скобках, если в фигурные скобки не занесено значения то будет создан пустой словарь, если было указано значение и только значение без ключа, то будет создано множество.
Это словарь
var1 = {}
print(var1)
print(type(var1))
# Вывод
# {}
# <class 'dict'>
А это уже множество:
var1 = {1}
print(var1)
print(type(var1))
# Вывод
# {1}
# <class 'set'>
- Множества можно сравнивать при помощи обычного оператора
==
вот таким образом:
set1 = {1,2,3,4,5}
set2 = {1,2,3,4,5}
if set1 == set2:
print("да")
else:
print("нет")
# Вывод
# да
- Также поддерживается сравнение, содержит ли одно множество в себе все элементы другого:
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 4, 5}
print("set1 > set2 = ", set1 > set2)
print("set2 > set1 = ", set2 > set1)
# Вывод
# set1 > set2 = True
# set2 > set1 = False
-
set.add(elem)
- добавляем элемент в множество -
set.remove(elem)
- Удаляет элемент из множества, и выдает ошибку KeyError если его не существует. -
set.discard(elem)
- Удаляет и не вызывает ошибки -
set.pop()
Удаляет некий элемент из множества, по скольку множества не отсортированы, удаляет рандомный элемент. -
set.clear()
- очищает множество.
Создать множества можно 2 способами, либо при помощи метода set()
в который передан список, из которого будет создано множество.
Либо при помощи фигурных скобок {1, 2, 3}
это схоже с обьявлением
словаря, но словарь имеет ключи:занчение
в то время как множество
имеет только значения.
my_set_one = set( [1, 2, 3, 4, 5] )
my_set_two = {1, 2, 3, 4, 5}
Множества могут содержать набор уникальных элементов, создается при
помощи функции set()
, чтобы добавить новый элемент, требуется
использовать метод .add()
my_set = set()
my_set.add(1)
print(my_set)
# Вывод
# {1}
При выводе множества можно увидеть что оно записывается в фигурных скобках, схожим со словарями образом, только словари содержат ключи и именно ключи должны быть уникальными,
my_set = set()
my_set.add(1)
my_set.add(2)
my_set.add(2)
print(my_set)
# Вывод
# {1, 2}
При попытке добавить уже существующее значение в множество, оно добавлено не будет, так как множество может содержать только уникальные значения.
При превращении списка в множество, все повторяющиеся элементы из списка будут автоматически удалены, таким образом множество можно использовать как инструмент для получения списка с уникальными элементами.
Множества не поддерживают доступа к элементам по их индексу.
my_set = set([1, 2, 33, 4, 4, 11, 22, 3, 3, 2])
print(my_set[0])
# Вывод
# TypeError: 'set' object does not support indexing
Но к ним можно обращаться при помощи итерации циклом for:
my_set = set([1, 2, 33, 4, 4, 11, 22, 3, 3, 2])
for elem in my_set:
print(type(elem), elem)
# <class 'int'> 1
# <class 'int'> 2
# <class 'int'> 33
# <class 'int'> 4
# <class 'int'> 3
# <class 'int'> 11
# <class 'int'> 22
Удалить элемент множества можно 2 способами.
discard()
- Удаляет элемент и не выдает ошибку, если элемент не был найден в множестве.
num_set = {1, 2, 3, 4, 5, 6}
print(num_set)
num_set.discard(3)
print(num_set)
num_set.discard(3)
print(num_set)
# {1, 2, 3, 4, 5, 6}
# {1, 2, 4, 5, 6}
# {1, 2, 4, 5, 6}
remove()
- Удаляет элемент и выдает ошибку если элемент не был найден.
num_set = {1, 2, 3, 4, 5, 6}
print(num_set)
num_set.remove(3)
print(num_set)
num_set.remove(3)
print(num_set)
# {1, 2, 3, 4, 5, 6}
# {1, 2, 4, 5, 6}
# Traceback (most recent call last):
# File "test.py", line 7, in <module>
# num_set.remove(3)
# KeyError: 3
Если мы попробуем удалить элемент при помощи метода remove()
при том
что этого элемента не существует, то мы получаем ошибку типа KeyError
-
pop()
- Этим методом тоже можно удалить элемент из множества, но мы не можем сказать какой из элементов будет удален. -
clear()
- Удаляет все элементы из множества, но не удаляет само множество.
Обьеденить множества можно при помощи метода union()
set_one = set([1,2,3,4,5])
set_two = set([6,7,8,9,10])
set_new = set_one.union(set_two)
print(set_new)
# Вывод
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Видим что оба множества обьеденились в одно.
Также метод union может обьеденить 3 множества:
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}
Генерировать можно не только списки, но и множества:
my_list = [ i*10 for i in range(10) if i%2==0]
print(my_list)
my_set = { i*10 for i in range(10) if i%2==0 }
print(my_set)
# Вывод
# [0, 20, 40, 60, 80]
# {0, 40, 80, 20, 60}
Способ генерации списков и множеств одинаков, но множества не отсортированы, так что имеют произвольный порядок.
Тут ситуация как и с list
и tuple
единственное
отличие set
от frozenset
в том что он не изменяем.