1. Множества. Введение

☰ Теория

Множества 

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

Класс set, в некоторой степени, соответствует математическому множеству. Многие широко используемые математические операции, применимые к множествам, существуют и в Python. Часто вычисления, производимые над множествами, оказываются гораздо быстрее, чем альтернативные операции со списками. 
 

Создание множества
my_set = {1, 2, 3}
print(my_set) # выведет {1, 2, 3}

Используя функцию set() можно создать множество из итерируемых объектов (символов строки, массива).

Например:

s = "мама"
my_set = set(s)
print(my_set) # выведет {"м", "a"}

arr = [1, 2, 3, 2, 1]
my_set = set(arr)
print(my_set) # выведет {1, 2, 3}

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

Узнать число элементов в множестве можно при помощи функции len, как в случае с массивами и строками. Например, len(my_set).

Проверить, принадлежит ли элемент множеству можно при помощи операции in, возвращающей значение типа bool, то есть True (истина) или False (ложь). Эта операция на множестве работает за О(1), в то время когда в списках или строках она работает за О(n)

i in A

Аналогично есть противоположная операция not in.


Добавление элемента в множество осуществляется методом add(). Если элемент уже есть в множестве, то он не будет добавлен.

my_set = {1, 2, 3}
my_set.add(4)
my_set.add(3) # элемент уже есть, поэтому ничего не произойдет
print(my_set) # выведет {1, 2, 3, 4}

s = "мама"
my_set = set("папа") # my_set будет содержать следующие элементы {"п", "а"}
my_set.add(s) 
print(my_set)    # выведет {"п", "a", "мама"}


Удаление элемента из множества можно сделать методом discard() или remove(). Разница между этими методами заключается в том, что если элемента нет в множестве, то метод remove() вызовет ошибку KeyError, а метод discard() просто ничего не сделает.

my_set = {1, 2, 3}
my_set.discard(2)
my_set.remove(3)
my_set.discard(4) # ничего не произойдет
# my_set.remove(4) вызовет ошибку KeyError
print(my_set) # выведет {1}
 

Из множества можно сделать список при помощи функции list.
 

Сортировка множества

Элементы множества хранятся в неупорядоченном виде. Мы можем их отсортировать, но при этом результат сохранится в массив (список). Множества можно отсортировать только функцией sorted().

numbers = {25, 15, 7, 8, 19, 34, 52, 0, 12, 59, 91, 4}
print(sorted(numbers))   #   [0, 4, 7, 8, 12, 15, 19, 25, 34, 52, 59, 91]

 

Перебор элементов множества

При помощи цикла for можно перебрать все элементы множества:

Primes = {2, 3, 5, 7, 11}
for num im Primes:
print(num)

 

Операции над множествами в Python:
  • Объединение множеств: оператор | или метод union()
  • Пересечение множеств: оператор & или метод intersection()
  • Разность множеств: оператор - или метод difference()
  • Симметричная разность множеств: оператор ^ или метод symmetric_difference()
set1 = {1, 2, 3}
set2 = {2, 3, 4}

print(set1 | set2) # выведет {1, 2, 3, 4}
print(set1.union(set2)) # выведет {1, 2, 3, 4}

print(set1 & set2) # выведет {2, 3}
print(set1.intersection(set2)) # выведет {2, 3}

print(set1 - set2) # выведет {1}
print(set1.difference(set2)) # выведет {1}

print(set1 ^ set2) # выведет {1, 4}
print(set1.symmetric_difference(set2)) # выведет {1, 4}

Множества в Python поддерживаются многими другими полезными методами. Приведем полный список в таблице ниже. 
 

Операция

Описание

A | B

A.union(B)

Возвращает множество, являющееся объединением множеств A и B 

A |= B

A.update(B)

Добавляет в множество A все элементы из множества B

A & B

A.intersection(B)

Возвращает множество, являющееся пересечением множеств A и B

A &= B

A.intersection_update(B)

Оставляет в множестве A только те элементы, которые есть в множестве B

A - B

A.difference(B)

Возвращает разность множеств A и B (элементы, входящие в A, но не входящие в B)

A -= B

A.difference_update(B)

Удаляет из множества A все элементы, входящие в множество B

A ^ B

A.symmetric_difference(B)

Возвращает симметрическую разность множеств A и B (элементы, входящие в A или в B, но не в оба из них одновременно)

A ^= B

A.symmetric_difference_update(B)

Записывает в A симметрическую разность множеств A и B

A <= B

A.issubset(B)

Возвращает True, естли A является подмножеством B

A >= B

A.issuperset(B)

Возвращает True, если A является надмножеством B
A < B Эквивалентно A <= B and A != B
A > B Эквивалентно A >= B and A != B

При использовании формы A.update(B) и аналогичных, параметр B может также являться списком, строкой и вообще любым итерируемым объектом.
Так, запись A.update([1, 2, 1]) - корректна (в множество будут добавлены элементы 1 и 2), а запись A |= [1, 2, 1] - приведет к ошибке.

Дан список чисел, который может содержать до 100000 чисел. Определите, сколько в нем встречается различных чисел.

Формат входных данных
Вводится список чисел. Все числа списка находятся на одной строке.

Формат входных данных
Выведите ответ на задачу
Примеры
Входные данныеВыходные данные
1 1 2 3 4 5 2 3 4
5

Напишите программу
Auto
       

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python18
Комментарий учителя