大佬们可不可以问下 题目要求用列表推导式求1-100的素数 这样做为什么输出结果不对
for x in range(2,101):
n_list=[x for y in range(2,x) if x%y==0 ]
print(n_list)
n_list 在循环里, 每次 都被重置一下,最后结果肯定不对啊,另外 这个推导式内部判 素数 也不是这样判的吧
参考如下:
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
n_list = [n for n in range(2, 101) if isPrime(n)]
print(n_list)
在你的代码中,你尝试使用列表推导式来找出1到100之间的素数,但是你的实现方式有误。你的代码片段中,n_list
的计算方式实际上是在为每个 x
值生成一个列表,这个列表包含了所有能整除 x
的数(除了 x
本身,因为 y
的范围是 2
到 x-1
)。然而,你的代码并没有直接用来判断 x
是否为素数,也没有将结果(即素数)收集到一个单独的列表中。
为了正确地使用列表推导式来找出1到100之间的所有素数,你应该在外部使用一个列表推导式来遍历 2
到 100
的所有数,然后在内部使用一个条件来检查这个数是否为素数。一个数 x
是素数,如果它只能被 1
和它自身整除。所以,你需要检查从 2
到 x-1
之间是否有任何数能整除 x
。如果没有,则 x
是素数。
下面是一个正确的实现方式:
# 使用列表推导式找出1到100之间的所有素数
primes = [x for x in range(2, 101) if all(x % y != 0 for y in range(2, int(x**0.5) + 1))] print(primes)
这里有几个关键改进:
2
到 100
的所有数。all()
函数和生成器表达式来检查 x
是否只能被 1
和它自身整除。这里,我们只需检查到 x
的平方根(int(x**0.5) + 1
),因为如果 x
有一个大于其平方根的因子,那么它必定还有一个小于或等于其平方根的因子。这样,primes
列表就会包含所有1到100之间的素数。