Использование фильтра Python с несколькими функциями и условными операторами - PullRequest
0 голосов
/ 30 октября 2018

Мне было интересно отфильтровать набор чисел через несколько функций с подходящими операторами «и» и «или». Например, я написал следующий код для фильтрации всех простых чисел, заканчивающихся на семь:

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 как независимой функции. Есть ли способ сохранить функции пригодными для использования самостоятельно и при этом применить фильтр, логически комбинируя их?

...