我有一个素数生成器,它需要迭代所有现有的素数,以确定一个被检查的值是否是素数,然后将其添加到列表中:
primes = [2]
max_num = 10000
for num in range(3, max_num+1, 2):
is_prime = True
for prime in primes:
if num % prime == 0:
is_prime = False
if is_prime == True:
primes.append(num)
print(primes)
有没有可能使用列表解析来完成这一点?以这样的方式?primes = [x for x in range(2, max_num+1) for y in primes if x % y != 0]
我试着运行这段代码,但得到了一个“未定义质数”的错误。
2条答案
按热度按时间w8ntj3qf1#
另一个列表理解黑客没有人应该使用。只是为了好玩。与奖金黑客约
int
秒。输出(在线试用!):
列表被注册用于循环垃圾收集,所以我使用它来查找解析所构建的列表对象。如何在所有其他列表中识别该列表?通过以一个特殊的
2
开始。不是通常的2
,而是一个值为2的不同的int
对象。该对象直接进入列表。之后,我遍历了范围内的奇数,通过寻找特殊的2
在垃圾收集器中找到了列表,一旦找到了列表,我就遍历它来检查当前的num
是否为素数。优化版本,只搜索列表一次(尝试在线!):
当
num
是我的2
时,我给primes
赋值一个空的哑元元组;当num
是3
时,我找到列表并赋值给primes
;对于后面的所有数字,我只把primes
重新赋值给它自己。pgky5nke2#
如果您需要相当于一条线的解决方案,但在时间上效率不高