Несколько вопросов по Python
Учу Python с помощью Youtube и в процессе набросал несколько вопросов:
1) "O: Циклический сдвиг вправо. Решите эту задачу в две строки. Ввод: 1 2 3 4 5. Вывод: 5 1 2 3 4":
Решил так:
print(sorted([1, 2, 3, 4, 5], key=lambda x: x % 5 == 0, reverse=True))
>>> [5, 1, 2, 3, 4]
Вопрос: Почему это работает именно так?
2) Вопрос: Чем отличается функция sorted() от функции filter()?
3) Вопрос: Подскажите, что делать после основной части Python-а: Декораторы, Замыкание и т.п.? Учить ООП, или начинать решать на Python-е различные задачи?
4) (Добавил) Какие сайты посоветуете для практики начального и среднего уровней?
Ответы (2 шт):
1 - неправильно у вас. это не сдвиг. можно так
a = input().split()
print(*(a[4:]+a[:4]))
2 - sorted - сортирует, filter - фильтрует
3 - начинай решать сразу
Нужно просто посмотреть, чему равно выражение ключа сортировки lambda x: x % 5 == 0 на элементах списка:
print(list(map(lambda x: x % 5 == 0, [1, 2, 3, 4, 5])))
[False, False, False, False, True]
При сортировке действует правило True > False, плюс к тому задан ключ reverse=True, т.е. сначала пойдут элементы, ключ которых больше (а не меньше, как по умолчанию). Таким образом, сначала пойдёт элемент, которому соответствует True (это 5), а потом элементы, которым соответствует ключ False (в том порядке, в котором они были изначально). Что мы и наблюдаем. Но к сдвигу это решение и правда не имеет отношения.
Что касается sorted и filter это сортировка и фильтрация. Сортировка сортирует элементы с помощью функции сравнения, фильтрация оставляет элементы по условию, а не прошедшие фильтрацию элементы отбрасывает.
По третьему вопросу - делайте что хотите, зависит от ваших личных обстоятельств.