【发布时间】:2017-11-27 01:58:47
【问题描述】:
感谢所有回复,我编辑了我的问题和代码,以便它们更好地工作。抱歉之前没有更清楚。
我是 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 notebook 中使用 %%timeit 证实了较小的数字,我觉得这很奇怪,因为代码的前几行几乎相同。
谢谢。
【问题讨论】:
-
函数在执行
return后立即停止。想想每个函数何时执行其return。此外,第一个函数中range(2, x)上的循环使用x的原始值,即使x发生变化,所以x到达1不会停止循环。 -
(另外,您的第一个函数因主要输入而损坏。)
-
你应该描述你想要做什么。也许找到主要因素?测试素数?你也不是真的在做。查看How to Ask 并编辑您的问题
-
顺便说一句,你不应该在这里使用
/,因为它会返回浮点数。相反,请使用地板除法运算符//。 -
@user2357112 是对的;关键是第一个示例在
x到达1时不会停止循环,并且范围对于素数输入来说太小了。
标签: python python-3.x for-loop while-loop