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

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

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

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

Задача«Участники и их интересы»

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

Формат ввода

Сначала вводится число N – количество кружков. Далее, в N строках вводится информация о каждом кружке. В каждой строке сначала указывается число K – количество учеников в кружке, а затем через пробел перечисляются имена учеников, посещающих этот кружок. Имена учеников – это строки, не содержащие пробелов

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

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

Пример

Ввод

3
2 Alice Bob
3 Charlie David Alice
1 Eve

Вывод

Подсказка

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

Подмножество (Subset)

Множество A является подмножеством множества B, если все без исключения элементы множества A содержатся также и в множестве B. Для проверки этого условия используются метод issubset() и оператор <=.

Полезный совет: Оператор <= проверяет на "нестрогое" подмножество. Это означает, что любое множество является подмножеством самого себя (set1 <= set1 вернет True). Если вам нужно проверить, что множество A является подмножеством B, но при этом не равно ему, используйте оператор строгого неравенства <.

set1 = {1, 2}
set2 = {1, 2, 3}
set3 = {1, 2}

# Проверка на подмножество
print(set1.issubset(set2))  # Вывод: True
print(set1 <= set2)         # Вывод: True

# Проверка на строгое подмножество
print(set1 < set2)          # Вывод: True
print(set3 < set1)          # Вывод: False, так как множества равны

Надмножество (Superset)

Множество A является надмножеством множества B, если оно содержит все элементы, которые есть в множестве B. Для проверки используются метод issuperset() и оператор >=.

Полезный совет: Аналогично подмножествам, оператор >= проверяет на "нестрогое" надмножество. Для проверки на строгое надмножество (A содержит все элементы B и хотя бы один дополнительный) используйте оператор >.

set1 = {1, 2, 3}
set2 = {1, 2}

# Проверка на надмножество
print(set1.issuperset(set2))  # Вывод: True
print(set1 >= set2)          # Вывод: True

# Проверка на строгое надмножество
print(set1 > set2)           # Вывод: True
print(set1 > {1, 2, 3})      # Вывод: False, так как множества равны

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

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

set1 = {1, 2, 3}
set2 = {3, 2, 1}
set3 = {1, 2, 3, 3} # Дубликат будет проигнорирован при создании множества

print(set1 == set2)   # Вывод: True
print(set1 == set3)   # Вывод: True

Другие методы множеств

Копирование множества

Метод copy() возвращает поверхностную копию множества.

Важный совет: Не путайте копирование с присваиванием. Если вы напишете set2 = set1, то set2 будет не новым множеством, а лишь другой ссылкой на set1. Изменение set2 приведет к изменению set1. Используйте copy(), чтобы создать независимое множество.

set1 = {1, 2, 3}

# Правильное копирование
set2 = set1.copy()
set2.add(4)
print(f"Оригинал set1: {set1}")  # Вывод: Оригинал set1: {1, 2, 3}
print(f"Копия set2: {set2}")    # Вывод: Копия set2: {1, 2, 3, 4}

# Неправильное копирование (присваивание ссылки)
set3 = set1
set3.add(5)
print(f"Оригинал set1 после изменения set3: {set1}") # Вывод: Оригинал set1 после изменения set3: {1, 2, 3, 5}
print(f"Ссылка set3: {set3}")                       # Вывод: Ссылка set3: {1, 2, 3, 5}

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

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

set1 = {1, 2, 3}
set2 = {3, 4, 5}
list1 = [5, 6, 7]

set1.update(set2)  # Дубликат {3} будет проигнорирован
print(set1)        # Вывод: {1, 2, 3, 4, 5}

set1.update(list1) # Можно обновлять из списка
print(set1)        # Вывод: {1, 2, 3, 4, 5, 6, 7}

Множества и их применения

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

Удаление дубликатов из списка

Это одно из самых частых применений множеств. Преобразование списка в множество автоматически удаляет все дубликаты. Затем, при необходимости, множество можно снова преобразовать в список.

Важно помнить: При таком преобразовании исходный порядок элементов списка не сохраняется.

numbers = [1, 2, 2, 3, 4, 4, 5, 1]
unique_numbers = list(set(numbers))
print(unique_numbers)  # Вывод может быть [1, 2, 3, 4, 5] (порядок не гарантирован)

Поиск общих элементов в двух списках

Чтобы найти элементы, которые присутствуют в обеих коллекциях, можно преобразовать их в множества и использовать оператор пересечения &.

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
common_elements = list(set(list1) & set(list2))
print(common_elements)  # Вывод: [3, 4] (порядок не гарантирован)

Поиск уникальных элементов (симметричная разность)

Чтобы найти элементы, которые есть в одном из списков, но не в обоих сразу, используется оператор симметричной разности ^.

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
unique_to_each_list = list(set(list1) ^ set(list2))
print(unique_to_each_list)  # Вывод: [1, 2, 5, 6] (порядок не гарантирован)
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика

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

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

AD

Реклама

red-snake blue-snake green-snake

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

Помощник ИИ

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