在使用列表推导生成素数时使用`all()`函数

时间:2019-04-18 16:22:17

标签: python list-comprehension

我正在尝试生成所有达到一定限制的素数,并在另一个条目中找到了以下针对我的问题的答案。有人可以在这里解释all()函数的用法。我知道它在True中的all([1,2,3])False的情况下会生成all([1,2,False])

[x for x in range(2, 20) if all(x % y != 0 for y in range(2, x))]

3 个答案:

答案 0 :(得分:1)

[x for x in range(2, 20) if all(x % y != 0 for y in range(2, x))]

首先让我们评估一下all()周围的环境:

x % y != 0 for y in range(2, x)

x % y得到剩余部分
!= 0不等于0
for y in range(2, x)的y介于2到x之间

因此,all()检查True的所有这些条件,如果是,则求值为True。正是在检查素数的情况下,因为它们是素数条件,所以当您将当前数除以其他数时,所有数都不具有余数0,这意味着它可以被整除,因此不是素数。

答案 1 :(得分:1)

只需将列表理解翻译为英语:

对于2到20的整数(即19)之间的每个数字,如果有余数用于除以2到n的整数之间的所有数字,则将其保留在列表中,其中n = x(即小于X)。

具体示例:

# If x is 4:
all(4 % 2 != 0, 4 % 3 != 0) -> all(False, True) -> False # 4 is not prime

答案 2 :(得分:1)

通过确定一个数字是否为质数来解释代码:

让我们看看5是否是素数

calculation = [5%2!=0?, 5%3!=0?, 5%4!=0?] 
Calculation = [True, True, True]
all(calculation) -> True (because all element of an iterable object(list) is true)

所以5是素数

现在让我们看看4是否是素数:

calculation = [4%2!=0?, 4%3!=0?] 
Calculation = [False, True]
all(calculation) -> False (because if any element in an iterable collection is false means all() will return false.)

所以4不是素数 注意:以上不是有效的代码。只是解释。