Set — это множество, в котором элементы не повторяются. Элементы множества никак не упорядочены.
In [1]:
a = set()
a.add(3) # Добавление элемента, O(1)
b = {5}
print(a, b)
In [2]:
c = {4, 4, 2, 6} # Элементы не повторяются
print(c) # Порядок элементов не важен
Можно приводить список к множеству или множество к списку:
In [3]:
lst = [8, 1, 3, 3, 8]
a = set(lst) # Приведение списка к множеству (выкинули повторения)
print(a)
print(list(a)) # Приведение множества к списку
In [4]:
a = {i ** 2 for i in range(10)}
print(a)
Чтобы проверить, находится ли элемент в множестве, можно использовать оператор in
. В среднем такая проверка занимает O(1).
In [5]:
b = {4, 5}
print(b)
print(5 in b)
if 8 in b:
print("YES")
else:
print("NO")
Удаление элемента из множества, в среднем за O(1):
In [6]:
a = {1, 2, 4, 5, 6}
a.discard(5)
print(a)
a.remove(4)
print(a)
a.discard(8000) # Игнорирует команду, если элемента нет
print(a)
a.remove(8000) # Кидает ошибку, если элемента нет
print(a)
Вычисление размера (мощности) множества:
In [7]:
b = {4, 5}
print(len(b))
In [8]:
a = {1, 2, 6, 9, 3}
for elem in a:
print(elem, end=" ")
print()
while a:
elem = a.pop() # Вытаскивает элемент из множества
print(elem, end=" ")
В объединение входят элементы, которые есть или в первом, или во втором множестве. В среднем работает за O(len(A) + len(B)).
In [9]:
a = {2, 3, 4}
b = {5, 2}
print(a | b)
Из элементов первого множества вычёркиваются элементы второго множества. В среднем работает за O(len(A)).
In [10]:
a = {2, 3, 4}
b = {5, 2}
print(a - b)
В пересечение входят только те элементы, которые есть и в первом, и во втором множестве. В среднем работает за O(min(len(A), len(B))).
In [11]:
a = {2, 3, 4}
b = {5, 2}
print(a & b)
Элементы входят либо только в первое, либо только во второе множество. В среднем работает за O(len(A) + len(B)).
In [12]:
a = {2, 3, 4}
b = {5, 2}
print(a ^ b)
В питоне два множества можно сравнить. Множество A меньше множества B, если все элементы множества A содержатся в множестве B, и при этом A != B. Сравнения выполняются за O(len(A) + len(B)).
In [13]:
a = {2, 3, 4}
b = {3, 4}
# Сравнения
print(a < b)
print(a > b)
print(a >= b)
print(a == b)
Словари — это пары (ключ, значение).
In [14]:
a = {}
b = {1: 3, "4": 8}
c = dict()
d = dict(((1, 2), ("a", 13)))
e = dict(one=1, two=2)
print(a, b, c, d, e, sep="\n", end="\n\n")
In [15]:
a = {}
a['hello'] = 'world' # Добавление элемента, O(1)
print(a)
In [16]:
a = {'one': 1, 'two': 2}
a['one'] = 8 # Изменение элемента, O(1)
print(a)
In [17]:
a = {'one': 1, 'two': 2}
a.pop('two') # Удаление элемента, O(1)
print(a)
In [18]:
b = {1: 3, '4': 8, 'a': 13}
print(b[1], b['a'], b.get('4')) # Существующие элементы
print(b.get('8'), b.get('three', 0)) # Несуществующие элементы со значением по умолчанию
print(b[0]) # b[0] - KeyError
In [19]:
a = {"a": 18, "b": 10, "c": 13}
print(len(a))
In [20]:
a = {"a": 18, "b": 10, "c": 13}
for x, y in a.items():
print("%s: %s" % (x, y))
print()
for x in a.keys():
print(x, end=" ")
print()
for x in a.values():
print(x, end=" ")
print()
In [21]:
to_sort = ["5", "2", "2", "2", "1", "1", "1", "0", "3", "3", "2", "2", "5", "5", "5", "3", "1"]
count_sort = {}
for elem in to_sort:
count_sort[elem] = count_sort.get(elem, 0) + 1
print(count_sort)