Помогите решить задачу (python)
Вводится список в виде целых чисел в одну строку через пробел. С помощью цикла for необходимо найти наименьшее четное значение в этом списке. Полученный результат вывести на экран. Если четного значени нет, то вывести слово "None" (без кавычек). Реализовать программу без использования функции min. Пытался в одну строку не получается можно решать и не в одну строку.
print((list(i for i in map(int, input().split()) if i % 2 == 0 )))
Ответы (2 шт):
a, *_ = sorted(filter(lambda x: not x % 2, map(int, input().split()))) or (None,)
print(a)
Нельзя 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
))