Несколько вопросов по 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 шт):

Автор решения: eri

1 - неправильно у вас. это не сдвиг. можно так

a = input().split()
print(*(a[4:]+a[:4]))

2 - sorted - сортирует, filter - фильтрует

3 - начинай решать сразу

4 - https://praktikum.yandex.ru/profile/backend-developer/

→ Ссылка
Автор решения: CrazyElf

Нужно просто посмотреть, чему равно выражение ключа сортировки 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 это сортировка и фильтрация. Сортировка сортирует элементы с помощью функции сравнения, фильтрация оставляет элементы по условию, а не прошедшие фильтрацию элементы отбрасывает.

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

→ Ссылка