我对通过具有适当的“和”和“或”运算符的几个函数过滤一组数字感兴趣。例如,我编写了以下代码来过滤所有以7结尾的素数:
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]
我可能会如下将两个lambda折叠成一个并获得所需的结果:
is_prime7 = lambda x : all([x%j for j in range(2,x)]) and x % 10 == 7
但是,它扼杀了将 ends_with_7 保留为独立功能的目的。有没有办法让功能本身保持可用,并通过逻辑组合它们来应用过滤器?