在继续下一行之前测试列表中所有值的条件

时间:2014-12-24 15:23:13

标签: python

创建素数列表的简单尝试

l = []
r = []
q = [2,3,5,7,11,13,17,19,23]
for x in range(200):
    l.append(x)
for y in l:
    for p in q:
        if y % p > 0:
            r.append(y)
print r 

所有人都可以看到这是一个失败,因为在进入下一行之前,条件y%p未在q的所有p值上进行测试。
问题 - 在进入下一行之前,如何测试q中所有p值的条件y%p。

1 个答案:

答案 0 :(得分:0)

检查all function

  

如果iterable的所有元素都为true(或者iterable为空),则返回True。

例如:

>>> y=25
>>> all(y%p>0 for p in q)
False
>>> y=29
>>> all(y%p>0 for p in q)
True

在你的例子中:

>>> l=range(2,200)
>>> r=[]
>>> for y in l:
...   if all(y%p for p in q):
...      r.append(y)
...
>>> r
[29, 31, 37, 41, 43, 47, 53, ...]