reversed(a) позволяет пройтись по объекту в обратном порядке. То есть в нашем случае — 3, 2, 1. Но это итератор, а значит пройтись по нему можно только 1 раз. Если попробовать получить значения второй раз, просто ничего не вернёт. При вызове мы получим sorted([3, 2, 1]) == sorted([]) и, понятное дело, это False.
Третий ответ был правильным, потому как в переменной l3 мы создаём новый список, где каждый элемент получается путём сложения соответствующих элементов из списков l1 и l2. Это достигается с помощью функции zip(), которая объединяет элементы из двух списков в пары, а генератор списка в свою очередь складывает элементы из каждой пары
Функция filter() в Python применяет другую функцию к заданному итерируемому объекту (список, строка, словарь и т. д.), проверяя, нужно ли сохранить конкретный элемент или нет. Простыми словами, она отфильтровывает то, что не проходит и возвращает все остальное.
filter() принимает два параметра. Первый — имя созданной пользователем функции, а второй — итерируемый объект.
В данном коде используется генератор списка, который создаёт список только для чётных чисел и умножает их на 2. Числа 2 и 4 являются чётными, поэтому при их умножении мы получим [4, 8]
В Python range() работает только с целыми числами и не поддерживает тип float. Мы не можем использовать число с плавающей точкой/десятичное значение в любом из аргументов range()
Но если такая необходимость есть - используйте функцию arange() из библиотеки NumPy
После того как мы очистили список. Мы передали в max аргумент default. C его помощью мы указали объект (у нас 0), который нужно вернуть, если предоставленный итерируемый объект пуст.
Если же итерация пуста и значение по умолчанию не указано, то мы бы увидели ValueError.