Мне было интересно отфильтровать набор чисел через несколько функций с подходящими операторами «и» и «или». Например, я написал следующий код для фильтрации всех простых чисел, заканчивающихся на семь:
is_prime = lambda x : all([x%j for j in range(2,x)])
ends_with_7 = lambda x : x % 10 == 7
primes_ending_with_7 = list(filter(is_prime and ends_with_7, range(1, 200)))
print(primes_ending_with_7)
Он выдал следующий вывод, который был явно неправильным:
[7, 17, 27, 37, 47, 57, 67, 77, 87, 97, 107, 117, 127, 137, 147, 157, 167, 177, 187, 197]
Я могу сложить две лямбды в одну следующим образом и получить желаемый результат:
is_prime7 = lambda x : all([x%j for j in range(2,x)]) and x % 10 == 7
Но это душит цель сохранения end_with_7 как независимой функции. Есть ли способ сохранить функции пригодными для использования самостоятельно и при этом применить фильтр, логически комбинируя их?