[ Сборник задач ]
Тема 7. Работа с множествами

[ Сборник задач ]
Тема 7. Работа с множествами

Python Workbook Cover T1
  • Тип данных: set
  • Контент: Вопросы (5шт) + задачи (5шт)

Оглавление

1
Введение
Рассмотрим, что из себя представляют множества в Python, какими характеристиками они обладают, и какие темы нужно повторить для решения задач.
Перейти
2
Вопросы и ответы
5 вопросов по теме "Множества" + ответы
Перейти
3
Условия задач
5 задач по теме двух уровней сложности: Базовый и *Продвинутый
Перейти
4
Решения задач
Приводим код решений указанных выше задач
Перейти
1
One

Введение

Множества – неупорядоченный тип уникальных данных, включающий только хешируемые элементы. Их можно изменять, неизменяемый аналог – frozenset. Не имеют индексации. Поиск объекта внутри множества очень быстрый (по сравнению со списками и кортежами).
Для успешного решения заданий требуется повторить: особенности множеств, уникальные методы, основные операции, способы модификации.

Читайте также

2
Two

Вопросы по теме "Работа с множествами"

3
Three

Задачи по теме "Работа с множествами"

Задача 1
На входе функция to_set() получает строку или список чисел. Преобразуйте их в множество. На выходе должно получиться множество и его мощность.
Задача 2
Имеется список с произвольными данными. Поставлена задача преобразовать его в множество. Если какие-то элементы нельзя хешировать, то пропускаем их. Функция list_to_set() выводит на печать получившееся множество.
Задача 3
На основании 3 исходных множеств (передаются в качестве аргументов функции diff()) требуется написать функцию, которая будет возвращать либо симметричную разность, либо просто разность (если дополнительный аргумент функции symmetric имеет значение False) приведенных объектов в порядке: 1-ое множество, 2-ое множество, 3-е множество.
Задача 4
Напишите функцию superset(), которая принимает 2 множества. Результат работы функции: вывод в консоль одного из сообщений в зависимости от ситуации:
1 - «Супермножество не обнаружено»
2 – «Объект {X} является чистым супермножеством»
3 – «Множества равны»
Задача 5*
Предоставлен список натуральных чисел. Требуется сформировать из них множество. Если какое-либо число повторяется, то преобразовать его в строку по образцу: например, если число 4 повторяется 3 раза, то в множестве будет следующая запись: само число 4, строка 44 (второе повторение, т.е. число дублируется в строке), строка 444 (третье повторение, т.е. строка множится на 3). Реализуйте вывод множества через функцию set_gen().
4
Two

Решения

Задача 1. Базовый уровень

Условие

На входе функция to_set() получает строку или список чисел. Преобразуйте их в множество. На выходе должно получиться множество и его мощность.

Список чисел или строка преобразуются в множество без возможных ошибок. Нужно просто обернуть их в конструктор и воспользоваться методом len() для получения ответа.
Решение – IDE

def to_set(element):
    st = set(element)
    return st, len(st)

# Тесты
print(to_set('я обычная строка'))
print(to_set([4, 5, 4, 6, 2, 9, 11, 3, 4, 2]))

Результат выполнения

({'к', 'б', 'я', 'ы', 'н', 'р', 'т', 'о', 'ч', ' ', 'с', 'а'}, 12)
({2, 3, 4, 5, 6, 9, 11}, 7)

Задача 2. Базовый уровень

Условие

Имеется список с произвольными данными. Поставлена задача преобразовать его в множество. Если какие-то элементы нельзя хешировать, то пропускаем их. Функция list_to_set() выводит на печать получившееся множество.

При решении придется проверять каждый элемент списка на хешируемость. Для этого воспользуемся классом Hashable из модуля collections.
Решение - IDE

from collections.abc import Hashable

def list_to_set(lst):
    st = {item for item in lst if isinstance(item, Hashable)}
    print(st)


# Тесты
list_to_set([1, [2]])
list_to_set([1, [2], 55, 55, {1, 2, 3}, (2, 2), 'string', 5.11])
Результат выполнения

{1}
{1, 5.11, 'string', 55, (2, 2)}

Читайте также

Задача 3. Базовый уровень

Условие

На основании 3 исходных множеств (передаются в качестве аргументов функции diff()) требуется написать функцию, которая будет возвращать либо симметричную разность, либо просто разность (если дополнительный аргумент функции symmetric имеет значение False) приведенных объектов в порядке: 1-ое множество, 2-ое множество, 3-е множество.

Разность двух множеств показывает уникальные элементы первого, которых нет во втором. Симметричная разность выводит уникальные компоненты обоих контейнеров, исключая общие для них. Решение можно провести как с помощью операторов, так и методов.
Вариант 1. При помощи операторов
Решение – IDE

def diff(set_1, set_2, set_3, symmetric=True):
    if symmetric:
        return set_1 ^ set_2 ^ set_3
    return set_1 - set_2 - set_3
Вариант 2. При помощи методов
Решение – IDE

def diff(set_1, set_2, set_3, symmetric=True):
    if symmetric:
        return set_1.symmetric_difference(set_2).symmetric_difference(set_3)
    return set_1.difference(set_2, set_3)

# Тесты 
set_1 = {3, 4, 5, 6, 20}
set_2 = {4, 6, 7, 8, 9}
set_3 = {5, 3, 8, 1}

print(diff(set_1, set_2, set_3))
print(diff(set_1, set_2, set_3, asymmetric=False))
Результат выполнения

{1, 20, 7, 9}
{20}

Задача 4. Базовый уровень

Условие

Напишите функцию superset(), которая принимает 2 множества. Результат работы функции: вывод в консоль одного из сообщений в зависимости от ситуации:
1 - «Супермножество не обнаружено»
2 – «Объект {X} является чистым супермножеством»
3 – «Множества равны»
Для написания функции необходимо выявить подчиненность множеств, наличие чистого супермножества. При помощи print() вывести ответ по результатам оценки.
Решение - IDE

def superset(set_1, set_2):
    if set_1 > set_2:
        print(f'Объект {set_1} является чистым супермножеством')
    elif set_1 == set_2:
        print(f'Множества равны')
    elif set_1 < set_2:
        print(f'Объект {set_2} является чистым супермножеством')
    else:
        print('Супермножество не обнаружено')

# Тесты 
set_1 = {1, 8, 3, 5}
set_2 = {3, 5}
set_3 = {5, 3, 8, 1}
set_4 = {90, 100}

superset(set_1, set_2)
superset(set_1, set_3)
superset(set_2, set_3)
superset(set_4, set_2)

Результат выполнения

Объект {8, 1, 3, 5} является чистым супермножеством
Множества равны
Объект {8, 1, 3, 5} является чистым супермножеством
Супермножество не обнаружено

Задача 5. * Продвинутый уровень

Условие

Предоставлен список натуральных чисел. Требуется сформировать из них множество. Если какое-либо число повторяется, то преобразовать его в строку по образцу: например, если число 4 повторяется 3 раза, то в множестве будет следующая запись: само число 4, строка «44» (второе повторение, т.е. число дублируется в строке), строка «444» (третье повторение, т.е. строка множится на 3). Реализуйте вывод множества через функцию set_gen().

Для решения удобно воспользоваться методом count().
Решение - IDE

def set_gen(lst):

    index = 0
    while index < len(lst):
        cnt = lst.count(lst[index])
        if cnt > 1:
            lst[index] = str(lst[index]) * cnt
        index += 1

    return set(lst)

# Тесты
list_1 = [1, 1, 3, 3, 1]
list_2 = [5, 5, 5, 5, 5, 5, 5]
list_3 = [2, 2, 1, 2, 2, 5, 6, 7, 1, 3, 2, 2]
print(set_gen(list_1))
print(set_gen(list_2))
print(set_gen(list_3))

Результат выполнения

{1, 3, '111', '33', '11'}
{'5555555', 5, '55', '55555', '5555', '555555', '555'}
{1, 2, 3, 5, 6, 7, '22', '2222', '22222', '222', '11', '222222'}

Как вам материал?

Читайте также