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

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

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

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

Задача«Одноглазый Джо»

Одноглазый Джо нашел старую карту сокровищ. На карте указано странное зашифрованное сообщение, которое, по слухам, указывает на местоположение клада. Джо уверен, что каждое сокровище отмечено уникальным символом в этом сообщении. Помогите Джо определить, сколько различных сокровищ он сможет найти.

Формат ввода

На вход подается строка - зашифрованное сообщение с карты сокровищ

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

Программа должна вывести одно целое число - количество уникальных символов в строке

Пример

Ввод

AABBCCDD

Вывод

4

Подсказка

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

Подмножество (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, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!