Ребята приносят игрушки в детский сад и играют все вместе.
Сегодня они решили выяснить, игрушки какого типа принадлежат только одному из детей. Напишите программу, которая по списку детей и их игрушек определит «частную собственность».
Формат ввода
В первой строке задается количество детей в группе (N).
В каждой из следующих N строк записано имя ребенка и его игрушки в формате:
Имя: игрушка1, игрушка2, ….
Формат вывода:
Список игрушек, которые есть только у одного из детей в алфавитном порядке.
Пример
Ввод
3
Аня: кукла, машинка, кукла, домик
Боря: машинка, зайчик
Вова: кубики, машинка
Вывод
домик
зайчик
кубики
кукла
Решение
Задача не представляет особой сложности и может быть решена разными способами. Например, через списки и множества или через словари.
Для начала рассмотрим решение с использованием списков и множеств.
Считываем строку, разбивая ее на две части – имя и игрушки, после чего разбиваем игрушки на отдельные слова, получая таким образом список всех игрушек, которые есть у ребенка. Так как имя ребенкау нас не спрашивают его можно игнорировать и кроме того, все игрушки добавлять в один общий список. Поэтому полученные игрушки добавляем в список всех игрушек, предварительно превратив его в множество. Множество нам нужно для того, чтобы избавиться от дублей игрушек у одного ребенка.
По окончании этой нехитрой процедуры мы получили список, в котором будут представлены игрушки всех детей по одной на каждого ребенка.
Остается найти игрушки встречающиеся лишь единожды и задача решена.
Например, это можно сделать с помощью метода count(). Но это решение настолько очевидно, что я не буду его здесь приводить, а покажу другой метод нахождения уникальных элементов.
Мы проходим по списку, постоянно извлекая из него первый элемент (с помощью pop(0)), после чего проверяем есть ли такой элемент в списке и если нет, то добавляем его в список уникальных обектов. После сравнения возвращаем элемент в конец списка.
Остается отсортировать список уникальных игрушек и вывести его.
Решение с использованием словарей.
Накапливаем игрушки тем же способом, что и в первом случае.
Сортируем список после того как занесли туда все игрушки.
Составляем частотный словарь игрушек.
Выводим те игрушки, которые оказались в словаре в единичном экземпляре.
Посмотреть код
Решение
# Списки и множества
toys = []
unique = []
for _ in range(int(input())):
name, str = input().split(': ')
toys.extend(set(str.split(', ')))
for i in range(len(toys)):
toy = toys.pop(0)
if toy not in toys:
unique.append(toy)
toys.append(toy)
print('\n'.join(sorted(unique)))
Решение
# Словарь
toys = []
unique = {}
for _ in range(int(input())):
name, str = input().split(': ')
toys.extend(set(str.split(', '))) # убрать set для поиска действительно уникальных игрушек # nopep8 # noqa
for toy in sorted(toys):
unique[toy] = unique.get(toy, 0) + 1
for toy in unique:
if unique[toy] == 1:
print(toy)