为什么一个代码比另一个快

时间:2017-11-27 01:58:47

标签: python python-3.x for-loop while-loop

我感谢所有的回复,我编辑了我的问题和代码,以便他们更好地工作。抱歉以前不清楚。

我是python的新手,已经学习了基础知识,我现在正在上网,想知道为什么我在这里放置的第二个代码比第一个快得多。代码是为了得到一个构成数字的素数列表,我觉得这两个代码在时间上应该相似,但它们不是:

代码1)

def getprime(x):
    j=[]
    for i in range (2,x+1):
        while x%i==0:
                j.append(i)
                x=x/i

    return j

2)

def get_primes(n):
    result = []
    for i in range(2, n + 1):
        s = 0
        while n % i == 0:
            n = n / i
            s += 1
        if s > 0:
            for k in range(s):
                result.append(i)
            if n == 1:
                return result

我使用的数字是95485200,我可以看到性能的巨大差异,在jupyter笔记本中用%% timeit确认较小的数字,我觉得奇怪,因为代码的前几行几乎相同。

感谢。

1 个答案:

答案 0 :(得分:-2)

第一个代码检查数字是否可以被因子整除if x%i==0: ...

while x%i==0: ...,第一段代码还会创建x的多个实例:x=x/i

更有效的代码是:

def prime(num):
    if num == 1 or num == 0:
        return False
    prime = True
    for i in range(2, num):
        if num % i == 0:
            prime = False

    return prime