Найти в Дзене
КУЗИНОБИТ

Урок 13: Множества (set) в Python.

Добро пожаловать на тринадцатый урок нашего курса по программированию на Python! В предыдущем уроке мы сделали общий обзор коллекций в Python. Теперь пришло время подробно разобраться с множествами (set), которые позволяют хранить уникальные элементы и выполнять с ними различные операции. В данную статью добавлены ссылки на GitHub в каждом примере. Также общая ссылка на GitHub для данного урока: Множество (set) — это неупорядоченная коллекция уникальных элементов. Примеры использования множеств: # Создание пустого множества
empty_set = set()
print(empty_set) # set() Обратите внимание: Использовать фигурные скобки {} с пустым содержимым нельзя — это будет интерпретировано как пустой словарь ({}). # Создание множества с элементами
numbers = {1, 2, 3, 4, 5}
print(numbers) # {1, 2, 3, 4, 5} # Преобразование списка в множество (для удаления дубликатов)
list_of_items = [1, 2, 2, 3, 4, 4, 5]
print(type(list_of_items)) # <class 'list'>
unique_items = set(list_of_items)
print(unique_items) #
Оглавление

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

В данную статью добавлены ссылки на GitHub в каждом примере. Также общая ссылка на GitHub для данного урока:
python_course/lesson_13 at main · kuzinobit/python_course

Что такое множество в Python?

Множество (set) — это неупорядоченная коллекция уникальных элементов.

  • Неупорядоченная — порядок элементов в множестве не гарантируется.
  • Уникальные элементы — один и тот же элемент не может появиться в множестве несколько раз.

Примеры использования множеств:

  • Хранение уникальных идентификаторов (ID) или тегов.
  • Удаление дубликатов из последовательности.
  • Выполнение операций пересечения, объединения и разности над наборами данных (например, проверка общих элементов).

Создание множества.

Пустое множество:

python_course/lesson_13/create_empty_set.py at main · kuzinobit/python_course
Пример создания пустого set.
Пример создания пустого set.
# Создание пустого множества
empty_set = set()
print(empty_set) # set()

Обратите внимание: Использовать фигурные скобки {} с пустым содержимым нельзя — это будет интерпретировано как пустой словарь ({}).

Множество с элементами:

python_course/lesson_13/create_set_with_element.py at main · kuzinobit/python_course
Пример создания set с элементами
Пример создания set с элементами
# Создание множества с элементами
numbers = {1, 2, 3, 4, 5}
print(numbers) # {1, 2, 3, 4, 5}

Преобразование списка или кортежа в множество:

python_course/lesson_13/list_to_set.py at main · kuzinobit/python_course
Пример преобразования list в set.
Пример преобразования list в set.
# Преобразование списка в множество (для удаления дубликатов)
list_of_items = [1, 2, 2, 3, 4, 4, 5]
print(type(list_of_items)) # <class 'list'>
unique_items = set(list_of_items)
print(unique_items) # {1, 2, 3, 4, 5}
print(type(unique_items)) # <class 'set'>

Основные операции с множествами.

Добавление элемента:

python_course/lesson_13/add_element_set.py at main · kuzinobit/python_course
Пример добавления элемента.
Пример добавления элемента.
numbers = {1, 2, 3}
numbers.add(4)
print(numbers) # {1, 2, 3, 4}

Удаление элемента:

  • remove() — удаляет элемент, если он существует, иначе возбуждает ошибку KeyError.
  • discard() — удаляет элемент, если он существует, иначе ничего не делает.
python_course/lesson_13/del_element_set.py at main · kuzinobit/python_course
Пример удаления элемента.
Пример удаления элемента.
numbers = {1, 2, 3, 4}
numbers.remove(4)
print(numbers) # {1, 2, 3}
numbers.discard(5) # не вызовет ошибку, элемент 5 не существует
print(numbers) # {1, 2, 3}

Метод pop():

Метод pop() удаляет и возвращает произвольный элемент множества (поскольку оно неупорядоченное).

python_course/lesson_13/pop_set.py at main · kuzinobit/python_course
Пример использования метода pop().
Пример использования метода pop().
numbers = {1, 2, 3, 4}
popped_element = numbers.pop()
print(popped_element) # 1
print(numbers) # {2, 3, 4}

Очистка множества:

python_course/lesson_13/clear_set.py at main · kuzinobit/python_course
Пример очистки set.
Пример очистки set.
numbers = {1, 2, 3, 4}

numbers.clear()
print(numbers) # set()

Операции над множествами.

Множества в Python поддерживают множество операций, напоминающих классические математические действия.

Объединение (union):

Объединение двух множеств возвращает множество, содержащее все элементы из обоих множеств.

  • Использование метода set1.union(set2)
  • Использование оператора |
python_course/lesson_13/union_set.py at main · kuzinobit/python_course
Пример использования union().
Пример использования union().
A = {1, 2, 3}
B = {3, 4, 5}

# Объединение с методом union()
union_set = A.union(B)
print(union_set) # {1, 2, 3, 4, 5}

# Объединение с оператором |
union_set_op = A | B
print(union_set_op) # {1, 2, 3, 4, 5}

Пересечение (intersection):

Пересечение двух множеств возвращает множество, содержащее общие элементы обоих множеств.

  • Использование метода set1.intersection(set2)
  • Использование оператора &
python_course/lesson_13/intersection_set.py at main · kuzinobit/python_course
Пример использования intersection().
Пример использования intersection().
A = {1, 2, 3}
B = {2, 3, 4}

intersection_set = A.intersection(B)
print(intersection_set) # {2, 3}

intersection_set_op = A & B
print(intersection_set_op) # {2, 3}

Разность (difference):

Разность множеств возвращает те элементы, которые есть в одном множестве, но отсутствуют в другом.

  • Использование метода set1.difference(set2)
  • Использование оператора -
python_course/lesson_13/difference_set.py at main · kuzinobit/python_course
-11
A = {1, 2, 3}
B = {2, 3, 4}

diff_set = A.difference(B)
print(diff_set) # {1}

diff_set_op = A - B
print(diff_set_op) # {1}

Симметрическая разность (symmetric_difference):

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

  • Использование метода set1.symmetric_difference(set2)
  • Использование оператора ^
python_course/lesson_13/symmetric_difference_set.py at main · kuzinobit/python_course
Пример использования symmetric_difference().
Пример использования symmetric_difference().
A = {1, 2, 3}
B = {2, 3, 4}

sym_diff_set = A.symmetric_difference(B)
print(sym_diff_set) # {1, 4}

sym_diff_set_op = A ^ B
print(sym_diff_set_op) # {1, 4}

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

Подмножество и надмножество:

  • Подмножество: A.issubset(B) или A <= B возвращают True, если все элементы A содержатся в B.
  • Надмножество: A.issuperset(B) или A >= B возвращают True, если все элементы B содержатся в A.
python_course/lesson_13/is_set.py at main · kuzinobit/python_course
Пример использования issubset() и issuperset().
Пример использования issubset() и issuperset().
A = {1, 2}
B = {1, 2, 3}

print(A.issubset(B)) # True
print(B.issuperset(A)) # True
print(A <= B) # True
print(B >= A) # True

Равенство множеств:

Два множества считаются равными, если содержат одинаковые элементы, вне зависимости от порядка.

python_course/lesson_13/quality_set.py at main · kuzinobit/python_course
-14
A = {1, 2, 3}
B = {3, 1, 2}

print(A == B) # True

Frozenset — неизменяемое множество.

Frozenset — это неизменяемый вариант множества.

  • Нельзя добавлять или удалять элементы.
  • Можно использовать как ключ в словаре или элемент другого множества.
python_course/lesson_13/frozenset_set.py at main · kuzinobit/python_course
Пример использования frozenset().
Пример использования frozenset().
fs = frozenset([1, 2, 3])
print(fs) #
frozenset({1, 2, 3})
fs.add(4) # Ошибка, так как frozenset неизменяемый

Практические примеры.

Пример 1. Удаление дубликатов из списка.

python_course/lesson_13/example_1_set.py at main · kuzinobit/python_course
Пример удаления дубликатов из списка.
Пример удаления дубликатов из списка.
numbers_with_duplicates = [1, 2, 2, 3, 4, 4, 4, 5]
unique_numbers = set(numbers_with_duplicates)
print(unique_numbers) # {1, 2, 3, 4, 5}

Пример 2. Объединение тегов.

python_course/lesson_13/example_2_set.py at main · kuzinobit/python_course
Пример объединения тегов.
Пример объединения тегов.
article_tags = {"python", "programming", "tutorial"}
new_tags = {"python", "development", "code"}

all_tags = article_tags.union(new_tags)
print(all_tags) # {'python', 'programming', 'tutorial', 'development', 'code'}

Пример 3. Поиск общих студентов в двух списках.

python_course/lesson_13/example_3_set.py at main · kuzinobit/python_course
Пример поиска общих студентов в двух списках.
Пример поиска общих студентов в двух списках.
group1 = {"Иван", "Мария", "Петр"}
group2 = {"Мария", "Анна", "Сергей"}

common_students = group1 & group2
print(common_students) # {'Мария'}

Заключение тринадцатого урока.

Сегодня мы:

  • Изучили, что такое множества (set) в Python.
  • Узнали, как создавать и модифицировать множества.
  • Рассмотрели основные операции: объединение, пересечение, разность, симметрическая разность.
  • Познакомились с неизменяемым множеством (frozenset).

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

Домашняя работа.

Задание 1: Уникальные слова.

Напишите программу, которая принимает строку от пользователя, разбивает её на слова и выводит уникальные слова в алфавитном порядке.
Подсказка:

  1. Приведите строку к нижнему регистру.
  2. Используйте split() для разделения на слова.
  3. Удалите знаки препинания при необходимости.
  4. Преобразуйте результат в множество, затем обратно в список для сортировки.

Задание 2: Общие элементы.

Напишите программу, которая:

  1. Просит у пользователя ввести список чисел через запятую (строка).
  2. Преобразует их в множество.
  3. Дает возможность ввести ещё один список чисел (также строкой).
  4. Выводит пересечение множеств (общие элементы).

Задание 3*: Анализ пересекающихся тегов.

Создайте два множества, каждое из которых содержит теги (слова) для статей.

  1. Выведите пересечение тегов (теги, которые встречаются в обеих статьях).
  2. Выведите теги, которые встречаются только в одной из статей (симметрическая разность).
  3. Выведите объединение всех тегов.

Вопросы для самопроверки.

  1. Что такое множество в Python и чем оно отличается от списка?
  2. Как удалить дубликаты из списка?
  3. Для чего используется неизменяемое множество (frozenset)?
  4. Какие операции над множествами вы знаете и в чем их суть?
  5. Можно ли использовать операцию индексации [i] для множества и почему?

Свои домашние работы отправляйте на почтовый ящик homework@kuzinobit.com.

Поздравляю с успешным освоением тринадцатого урока! Теперь вы уверенно можете работать с множествами и применять их в своих программах.

В следующем уроке мы рассмотрим deque (двустороннюю очередь) из модуля collections — это полезная структура данных, которая позволяет эффективно добавлять и удалять элементы с обоих концов. Также затронем некоторые аспекты итераторных протоколов и посмотрим, как их можно использовать вместе с deque для более гибких операций над данными.

Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!