Основы работы с множествами

  1. Встроенные функции len()sum()min()max()
  2. Оператор принадлежности in
  3. Перебор множеств
  4. Форматированный вывод множеств
  5. Сравнение множеств
  6. Функция sorted()

Основы работы с множествами

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

Функция len()

Длиной множества называется количество его элементов. Чтобы посчитать длину множества, используют встроенную функцию len() (от слова length – длина).

Следующий программный код:

myset1 = {2, 2, 4, 6, 6}
myset2 = set([1, 2, 2, 3, 3, 4, 4, 5, 5])
myset3 = set('aaaaabbbbccccddd')

print(len(myset1))
print(len(myset2))
print(len(myset3))

выведет:

3
5
4

Оператор принадлежности in

Оператор in позволяет проверить, содержит ли множество некоторый элемент.

Рассмотрим следующий код:

numbers = {2, 4, 6, 8, 10}

if 2 in numbers:
    print('Множество numbers содержит число 2')
else:
    print('Множество numbers не содержит число 2')

Такой код проверяет, содержит ли множество numbers число 2 и выводит соответствующий текст:

Множество numbers содержит число 2

Мы можем использовать оператор in вместе с логическим оператором not. Например

numbers = {2, 4, 6, 8, 10}

if 0 not in numbers:
    print('Множество numbers не содержит нулей')

Оператор принадлежности in работает очень быстро на множествах – намного быстрее, чем на списках. Поэтому если требуется часто осуществлять поиск в коллекции уникальных данных, то множество – подходящий выбор.

Встроенные функции sum(), min(), max()

Встроенная функция sum() принимает в качестве аргумента множество чисел и вычисляет сумму его элементов.

Следующий программный код:

numbers = {2, 2, 4, 6, 6}
print('Сумма всех элементов множества =', sum(numbers))

выводит:

Сумма всех элементов множества = 12

Встроенные функции min() и max() принимают в качестве аргумента множество и находят минимальный и максимальный элементы соответственно.

Следующий программный код:

numbers = {2, 2, 4, 6, 6}
print('Минимальный элемент =', min(numbers))
print('Максимальный элемент =', max(numbers))

выводит:

Минимальный элемент = 2
Максимальный элемент = 6

Примечания

Примечание 1. Индексация и срезы недоступны для множеств.

Примечание 2. Операция конкатенации + и умножения на число * недоступны для множеств.

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

Перебор элементов множества осуществляется точно так же, как и перебор элементов списка, то есть с помощью цикла for.

Для вывода элементов множества каждого на отдельной строке можно использовать следующий код:

numbers = {0, 1, 1, 2, 3, 3, 3, 5, 6, 7, 7}

for num in numbers:
    print(num)

Такой код выведет (порядок элементов может отличаться):

0
1
2
3
5
6
7

Мы также можем использовать операцию распаковки множества.

Приведенный ниже код:

numbers = {0, 1, 1, 2, 3, 3, 3, 5, 6, 7, 7}

print(*numbers, sep='\n')

выводит (порядок элементов может отличаться):

0
1
2
3
5
6
7

Не стоит забывать, что множества – неупорядоченные коллекции, поэтому полагаться на порядок вывода элементов не стоит. Если нужно гарантировать порядок вывода элементов (по возрастанию/убыванию), то необходимо воспользоваться встроенной функцией sorted().

Приведенный ниже код:

numbers = {0, 1, 1, 2, 3, 3, 3, 5, 6, 7, 7}

sorted_numbers = sorted(numbers)
print(*sorted_numbers, sep='\n')

будет гарантированно выводить элементы множества в порядке возрастания.

Обратите внимание на то, что функция sorted() возвращает отсортированный список, а не множество. Не путайте встроенную функцию sorted() и списочный метод sort(). Множества не содержат метода sort().

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

Множества можно сравнивать между собой. Равные множества имеют одинаковую длину и содержат равные элементы. Для сравнения множеств используются операторы == и !=.

Приведенный ниже код:

myset1 = {1, 2, 3, 3, 3, 3}
myset2 = {2, 1, 3}
myset3 = {1, 2, 3, 4}

print(myset1 == myset2)
print(myset1 == myset3)
print(myset1 != myset3)

выводит:

True
False
True

Примечания

Примечание 3. Встроенная функция sorted() имеет опциональный параметр reverse. Если установить этот параметр в значение True, произойдет сортировка по убыванию.

Приведенный ниже код:

numbers = {0, 1, 1, 2, 3, 3, 3, 5, 6, 7, 7}

sortnumbers = sorted(numbers, reverse=True)
print(*sortnumbers, sep='\n')

гарантированно выводит:

7
6
5
3
2
1
0

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