我目前将 ↓ 设置为我的 randprime(p,q)
函数。有什么方法可以通过genexp 或listcomp 之类的东西来压缩它吗?这是我的功能:
n = randint(p, q)
while not isPrime(n):
n = randint(p, q)
最佳答案
最好只生成素数列表,然后从该行中进行选择。
照原样,对于您的代码,如果区间中没有素数,或者如果 randint
总是选择非素数,那么它很可能会陷入无限循环,然后 while
循环永远不会结束。
所以这可能更短且麻烦更少:
import random
primes = [i for i in range(p,q) if isPrime(i)]
n = random.choice(primes)
这样做的另一个好处是,如果区间中没有素数,就不会出现死锁。如前所述,这可能会很慢,具体取决于范围,因此如果您提前缓存素数,速度会更快:
# initialising primes
minPrime = 0
maxPrime = 1000
cached_primes = [i for i in range(minPrime,maxPrime) if isPrime(i)]
#elsewhere in the code
import random
n = random.choice([i for i in cached_primes if p<i<q])
同样,进一步的优化是可能的,但这在很大程度上取决于您的实际代码……而且您知道他们对过早优化的看法。
关于python - python中的随机素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831283/