K. Выявление уникальности

Позади уже 10 задач! Вы отлично справляетесь с работой со списками и выражениями.
Если хочется — сделайте небольшой перерыв, а потом возвращайтесь — дальше будет не менее интересно.

Когда вы работаете с данными, важно уметь выделять уникальные значения — те, что появляются ровно один раз.

Вашему решению предоставлен список numbers.
Напишите выражение, которое создаёт множество всех чисел, встречающихся в списке ровно один раз.

Примечание

В решении не должно быть ничего, кроме выражения.

Подсказка:
Для проверки количества повторений числа в списке можно воспользоваться методом .count()

Пример

Ввод

numbers = [1, 2, 1, 3, 1, 2, 2, 4, 1, 2, 5, 1, 2]

Вывод

{3, 4, 5}

Ввод

numbers = [-8, 7, -3, -2, 5, 0, 7, -2, -8, 6, -10, 4, -9, -9, 7]

Вывод

{0, 4, 5, 6, -10, -3}

Решение

По-хорошему задачи такого рода нужно решать через словари, так как в таком случае строка, какой бы она длинной не была проходится один раз. В случае с count строка проходится минимум столько раз, сколько уникальных букв она содержит. В худшем случае, если не позаботится об оптимизации, столько раз, сколько в ней букв.

Но нам сказали решать таким способом, значит будем решать таким.

Сперва рассмотрим самое неэффективное решение:
Нам необходимо перебрать все числа и проверить с помощью count() сколько раз встречается текущее число. Это решение плохо тем, что для списка, состоящего из одной единички и миллиона двоек оно пройдет миллион и один раз по списку. Тем не менее это решение проходит проверку.

Как его можно улучшить? достаточно обеспечить уникальность чисел, которые мы проверяем. это можно сделать добавив всего одну директиву в предыдущее решение (set()). Для описанного нами случая с миллионом двоек и одной единичкой список будет пройден всего три раза.

Когда второе решение будет хуже первого с точки зрения эффективности? Только в том случае, если все числа в списке окажутся уникальными. Тогда мы пройдем по списку n + 1 раз, в то время, как первое решение пройдет по списку n раз. Но в реальной жизни, это будет встречаться крайне редко, если у нас задача на поиск уникальных значений, а потому стоит отдавать предпочтение второму подходу.

Посмотреть код

Решение

Python
# неэффективное решение, которое проходит тест
{number for number in numbers if numbers.count(n) == 1}

Решение

Python
{number for number in set(numbers) if numbers.count(n) == 1}
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии