• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 9. Множества

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Товары для вечеринки»

Представьте, что вы составляете список покупок для вечеринки. У вас есть перечень ингредиентов, но некоторые из них повторяются. Вам нужно определить, сколько различных (уникальных) ингредиентов вам потребуется купить.

Формат ввода

Вводится одна строка, содержащая названия ингредиентов, разделенных пробелами

Формат Вывода

Выводится одно целое число – количество уникальных ингредиентов

Пример

Ввод

apple banana orange apple banana

Вывод

3

Подсказка

Множества в питоне

Множества в Python — это неупорядоченные коллекции уникальных элементов. Они представляют собой мощный инструмент для работы с данными, когда важна скорость проверки принадлежности элемента к коллекции и отсутствие дубликатов. Они обладают рядом полезных свойств и методов, которые позволяют эффективно выполнять математические операции над данными, такие как объединение, пересечение, разность и другие.

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

  • Уникальные элементы: В множестве не может быть дублирующихся элементов. Если вы попытаетесь добавить элемент, который уже существует, множество просто не изменится. Это их ключевое свойство, идеально подходящее для удаления дублей.
  • Неупорядоченность: Элементы множества не имеют определенного порядка. Это означает, что вы не можете обратиться к элементу по индексу (например, my_set[0]), как это делается в списках. При итерации по множеству порядок элементов не гарантирован.
  • Изменяемость: Элементы во множество можно добавлять и удалять. Однако сами элементы множества должны быть неизменяемыми (хешируемыми) объектами. Это могут быть числа, строки, кортежи (tuple). Вы не можете добавить в множество изменяемые объекты, такие как списки или другие множества, так как их содержимое может меняться, что нарушает внутреннюю логику множеств.

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

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

Для создания пустого множества обязательно используйте функцию set(), так как синтаксис {} создаёт пустой словарь. Это частая ошибка начинающих программистов.

# Правильно
my_set = set()

# Неправильно (это создаст словарь)
my_dict = {} 

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

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

my_set = {1, 2, 3, 4, 5}

Полезный совет: Использование функции set() — это самый простой способ удалить дубликаты из списка.

my_list = [1, 2, 2, 3, 4, 3, 5, 5]
unique_elements = set(my_list)
print(unique_elements)  # Вывод: {1, 2, 3, 4, 5}

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

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

Для добавления одного элемента используется метод add().

my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # Вывод: {1, 2, 3, 4}

# Попытка добавить существующий элемент ничего не изменит
my_set.add(2)
print(my_set)  # Вывод: {1, 2, 3, 4}

Удаление элементов

Существует три способа удаления:

  • remove(element): удаляет указанный элемент. Если элемент не найден, вызывает ошибку KeyError. Используйте этот метод, когда вы уверены, что элемент должен существовать, и его отсутствие является ошибкой в логике программы.
  • discard(element): удаляет указанный элемент, но не вызывает ошибку, если элемент не найден. Это безопасный способ удаления, когда вы не уверены, есть ли элемент в множестве.
  • pop(): удаляет и возвращает произвольный элемент множества. Так как множества неупорядочены, вы не можете предсказать, какой именно элемент будет удален. Метод вызовет KeyError, если множество пусто.
my_set = {1, 2, 3}
my_set.remove(2)
print(my_set)  # Вывод: {1, 3}

# my_set.remove(4) # Это вызовет ошибку KeyError

my_set.discard(4)  # Ошибки не будет, множество останется {1, 3}

popped_element = my_set.pop()
print(popped_element)  # Вывод: 1 или 3 (зависит от реализации)
print(my_set)  # Вывод: оставшийся элемент

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

Метод clear() удаляет все элементы из множества, делая его пустым.

my_set = {1, 2, 3}
my_set.clear()
print(my_set)  # Вывод: set()

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

Эти операции не изменяют исходные множества, а создают и возвращают новое.

Объединение (Union)

Возвращает новое множество, содержащее все уникальные элементы из обоих множеств. Используется оператор | или метод union(). Когда использовать: Когда вам нужно собрать все уникальные элементы из нескольких коллекций в одну.

set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2
# или
union_set = set1.union(set2)
print(union_set)  # Вывод: {1, 2, 3, 4, 5}

Пересечение (Intersection)

Возвращает новое множество, содержащее только те элементы, которые есть в обоих множествах. Используется оператор & или метод intersection(). Когда использовать: Когда вам нужно найти общие элементы между двумя группами.

set1 = {1, 2, 3}
set2 = {3, 4, 5}
intersection_set = set1 & set2
# или
intersection_set = set1.intersection(set2)
print(intersection_set)  # Вывод: {3}

Разность (Difference)

Возвращает новое множество, содержащее элементы, которые есть в первом множестве, но отсутствуют во втором. Используется оператор - или метод difference(). Когда использовать: Когда нужно найти, что есть в одной группе, но нет в другой. Порядок важен: set1 - set2 не то же самое, что set2 - set1.

set1 = {1, 2, 3}
set2 = {3, 4, 5}
difference_set = set1 - set2
print(difference_set)  # Вывод: {1, 2}

difference_set_2 = set2 - set1
print(difference_set_2) # Вывод: {4, 5}

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

Возвращает новое множество, содержащее элементы, которые есть в одном из множеств, но не в обоих сразу. Используется оператор ^ или метод symmetric_difference(). Когда использовать: Когда нужно найти уникальные для каждой группы элементы, исключив общие.

set1 = {1, 2, 3}
set2 = {3, 4, 5}
symmetric_difference_set = set1 ^ set2
# или
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set)  # Вывод: {1, 2, 4, 5}
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!