我正在尝试生成所有达到一定限制的素数,并在另一个条目中找到了以下针对我的问题的答案。有人可以在这里解释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))]
答案 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
不是素数
注意:以上不是有效的代码。只是解释。