Вашему решению предоставлен список натуральных чисел numbers
.
Напишите выражение для генерации строки, представляющей собой отсортированный список чисел, записанных через дефис, окружённый пробелами, без повторений.
Примечание
В решении не должно быть ничего, кроме списочного выражения.
Пример
Ввод
numbers = [3, 1, 2, 3, 2, 2, 1]
Вывод
'1 - 2 - 3'
Ввод
numbers = [1, 1, 3, 1, 10, 2, 4, 6, 7, 1, 2, 7]
Вывод
'1 - 2 - 3 - 4 - 6 - 7 - 10'
Решение
Незначительная модификация предыдущего задания. В этот раз нам надо создать множество чисел, отсортировать его и вывести через разделитель в виде дефиса, обрамленного пробелами.
Фактически, нам надо завернуть в списочное выражение следующий код:
Python
result = ''
nums = []
for number in sorted(set(numbers)):
nums.append(str(number))
result = ' - '.join(nums)
Посмотреть код
Решение
Python
' - '.join([str(num) for num in sorted(set(numbers))])
В 5 строке нужно сначала преобразовать в str перед применением append:
nums.append(str(number))
а в 7 строке наоборот str не нужно:
result = ‘ – ‘.join(nums)
Это дело вкуса.
Можно было сделать еще через map, тогда еще проще:
” – “.join(map(str, sorted(set(numbers))))
Спасибо за предоставленное решение.
Есть три причины по которым этого решения нет в ответах
1) хорошим тоном считается решать задачи в пределах выданных в теории знаниях
2) это не проще. это то же самое, просто списочное выражение спрятано в функцию, которую еще не объясняли
3) есть хороший “правило” о том, что читабельность важнее производительности, пока производительность не важна
А так можно и из первого раздела задачки решать через мапы, фильтры и прочие непонятные начинающим вещи.
Объясните, пожалуйста, не понимаю…
По поводу str() в 7 строке (а не в 5).
Если записать в 7 строке result = ‘ – ‘.join(str(nums)), то вывод будет такой: ‘ – 1 – , – – 2 – , – – 3 – ‘.
А еще зачем в решении генерируется список? Ведь в условии задачи – генерация строки, а не списка.
вы вольны использовать любые промежуточные форматы данных, если это повышает эффективность программы. так как изначально мы имеем список, и имеем очень эффективный способ преобразовать его в нужную нам строку, нам остается только избавиться от дубликатов и преобразовать его в строку.
преобразование в str все-же эффективноей сделать в пятой строке, я перенесу его туда.
в прошлом варианте кода, который надо обернуть в строку с помощью join была опечатка и она была написана неправильно. она должна была выглядеть так:
result = ‘ – ‘.join(str(num for num in nums))
Поняла, большое спасибо!