Помогите решить задачу (python)

Вводится список в виде целых чисел в одну строку через пробел. С помощью цикла for необходимо найти наименьшее четное значение в этом списке. Полученный результат вывести на экран. Если четного значени нет, то вывести слово "None" (без кавычек). Реализовать программу без использования функции min. Пытался в одну строку не получается можно решать и не в одну строку.

print((list(i for i in map(int, input().split()) if i % 2 == 0 )))

Ответы (2 шт):

Автор решения: Namerek
a, *_ = sorted(filter(lambda x: not x % 2, map(int, input().split()))) or (None,)
print(a)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Нельзя min, будет max:

print(max(
    (i for i in map(int, input().split()) if i % 2 == 0),
    key=lambda x: -x,
    default=None
))

Ладно, ладно, это была шутка отчасти. Можно обойтись без min и max:

def min2(a, b):
    return a if b is None or a < b else b


# a - array, r - result
def min_(a, r):
    return min_(a[1:], min2(a[0], r)) if a else r
        

print(min_([i for i in map(int, input().split()) if i % 2 == 0], None))

Но теперь получился не однострочник. Делаем однострочник:

print((lambda f: f(f, [i for i in map(int, input().split()) if i % 2 == 0], None))(lambda f, a, r: f(f, a[1:], a[0] if r is None or a[0] < r else r) if a else r))

Это Y combinator - устройство для использования анонимных рекурсивных функций. Вот он в две строки: первая – вызов верхнего уровня, вторая – анонимная рекурсивная лямбда для поиска минимума в списке:

print((
    lambda f: f(f, [i for i in map(int, input().split()) if i % 2 == 0], None)
)(
    lambda f, a, r: f(f, a[1:], a[0] if r is None or a[0] < r else r) if a else r
))
→ Ссылка