检查列表理解中的列表长度(基于列表理解中的元素计数的迭代)

Rud*_*ira 3 python list-comprehension list python-2.7

我需要计算前五个素数.我想在列表理解中构建它时检查列表的长度.以下代码不起作用.

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
Run Code Online (Sandbox Code Playgroud)

输出:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Run Code Online (Sandbox Code Playgroud)

为什么len(primes)<6不在这里工作.我怎样才能做到这一点?

rob*_*rit 5

"Pythonic"方式是使用生成器,加上islice函数:

from itertools import islice

def checkPrime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True

def primes():
    i = 2
    while True:
        if checkPrime(i):
            yield i
        i += 1

first_5 = list(islice(primes, 5))
Run Code Online (Sandbox Code Playgroud)

这样做会创建一个无限的"列表" primes,您可以在很多方面使用该列表来使用列表,但它实际上只会计算您需要的值.