Pol*_*ITS 5 python random primes list-comprehension generator
我目前有↓设置为我的randprime(p,q)功能.有没有办法通过像genexp或listcomp之类的东西来缩小它?这是我的功能:
n = randint(p, q)
while not isPrime(n):
n = randint(p, q)
Run Code Online (Sandbox Code Playgroud)
小智 4
最好只生成素数列表,然后从该行中进行选择。照原样,您的代码很可能会陷入无限循环,如果间隔中没有素数,或者randint总是选择非素数,那么while循环将永远不会结束。
所以这可能更短并且不那么麻烦:
import random
primes = [i for i in range(p,q) if isPrime(i)]
n = random.choice(primes)
Run Code Online (Sandbox Code Playgroud)
这样做的另一个优点是,如果区间内没有素数,则不会出现死锁。如前所述,根据范围的不同,这可能会很慢,因此如果您提前缓存素数,速度会更快:
# 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])
Run Code Online (Sandbox Code Playgroud)
同样,进一步的优化是可能的,但很大程度上取决于您的实际代码......并且您知道他们对过早优化的看法。
| 归档时间: |
|
| 查看次数: |
13786 次 |
| 最近记录: |