Позади уже 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 раз. Но в реальной жизни, это будет встречаться крайне редко, если у нас задача на поиск уникальных значений, а потому стоит отдавать предпочтение второму подходу.
Посмотреть код
Решение
# неэффективное решение, которое проходит тест
{number for number in numbers if numbers.count(n) == 1}
Решение
{number for number in set(numbers) if numbers.count(n) == 1}