我只需要计算前五个素数。我想检查列表的长度,同时在列表理解中构建它。以下代码不起作用。在
def checkPrime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
primes = []
primes = [x for x in range(2,30) if(checkPrime(x) and len(primes)<6) ]
print primes
输出:
^{pr2}$为什么len(primes)<6
在这里不工作。我怎么才能做到呢?在
将
itertools.islice
与filter
结合使用可使计算变懒。在List Comprehension创建并返回新列表。在代码中,在List Comprehension中,
len(primes)
将始终返回零,因为在列表理解完成并返回新列表之前,列表的长度不会更新。在如果您必须使用列表理解,您可以创建一个生成器函数来返回范围内的下一个素数。在列表理解中,调用生成器对象上的^{} (使用
range
限制所需值的计数)。在例如:
^{pr2}$primes
保存的最终值为:正如robbrit's answer中所建议的,实现这一点的python方法是使用^{} (但它不是您所要求的列表理解):
“Pythonic”方法是使用generator,再加上^{} 函数:
这将创建一个名为
primes
的无限“列表”,您可以以多种方式使用列表,但它实际上只计算您需要的值。在相关问题 更多 >
编程相关推荐