下面的两个代码示例都是我遇到问题的旧例子,我在迭代数字列表中找到符合条件列表的数字,但找不到表达它的简洁方法,除了:
condition1 and condition2 and condition3 and condition4 and condition5
以上两个例子:
if str(x).count("2")==0 and str(x).count("4")==0 and str(x).count("6")==0 and str(x).count("8")==0 and str(x).count("0")==0:
if x % 11==0 and x % 12 ==0 and x % 13 ==0 and x%14==0 and x %15 == 0 and x%16==0 and x%17==0 and x%18==0 and x%19==0 and x%20==0:
有没有一种简单,更简洁的方法呢?
我的第一次重试是将条件存储在如下列表中:
list=["2","4","6","8","0"]
for element in list:
#call the function on all elements of the list
list=[11,12,13,14,15,16,17,18,19,20]
for element in list:
#call the function on all elements of the list
但我希望有一个更整洁/更简单的方式。
答案 0 :(得分:3)
如果您可以在生成器表达式中表达您的条件,内置函数all
可以简化此操作:
result = all(x % n == 0 for n in xrange(11, 21))
它返回一个布尔结果,指示其可迭代参数的所有元素是否为True
,一旦False
,就会短路到结束评估。
这是我在过去一小时左右看到的第二个问题,其中all
就是答案 - 必须是悬而未决的事。
答案 1 :(得分:3)
您可以使用像这样的生成器表达式
def f(n):
return x%n
if all(f(element) for element in lst):
...
如果功能/计算不是太复杂,你可以直接把它放在
中if all(x % element for element in lst):
...