python输出1000以内回文数_「答案」python每日一题20201108

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。用python输出1000以内的所有质数。

#####方法一#####def isPrime(n):    if n <=1:        return False    for k in range(2,round(n**0.5)+1):        if n%k==0:            return False    return Truefor i in range(2,1001):    if isPrime(i):        print(i,end=",")

【评析】

这是常规解法,定义一个质数判断函数,用每一个待检测数除以从2到该数的平方根区间内的数,如果发现存在余数为0情况则断定该数不是质数。

#####方法二#####print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])

【评析】

如果看过昨天的题目评析,应该对这个形式并不陌生。这就是用for生成一个数列并自动赋值,当然这个还带了一个if的异形表达。

在这里我放上第二解法的目的倒不是为了显得很酷,实际是我要指出在python中直接生成列表,然后一起打印输出,比判断一个输出一个效率要高很多(执行了很多次print)。因为涉及外设的输入和输出都是有开销的,能合并进行的就要合并进行,这个在实际应用时还是要注意。

下面是我对这两个例子做了修改,以便于打印输出不同方法执行的时间。

#####方法一#####from datetime import datetimett=datetime.now()#=================def isPrime(n):    if n <=1:        return False    for k in range(2,round(n**0.5)+1):        if n%k==0:            return False    return Truefor i in range(2,1001):    if isPrime(i):        print(i,end=",")#=================print()print (datetime.now()-tt)#####方法二#####tt=datetime.now()#=================print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])#=================print()print (datetime.now()-tt)

结果如下:

99f5a4210d410deaaf63b58f813d014c.png

没有对比就没有伤害,效率相差实在巨大。

进而如果我们对方法一进行修改,把所有判断出的质数加入列表,最后一次性输出,情况会有改观吗?

#####方法一修改#####from datetime import datetimett=datetime.now()#=================pp=[]def isPrime(n):    if n <=1:        return False    for x in range(2,round(n**0.5)+1):        if n%x==0:            return False    pp.append(n)#添加到列表中    return Truefor i in range(2,1001):    isPrime(i)print(pp)#只输出一次#=================print()print (datetime.now()-tt)

运行结果:

4f809cb5b7d3b66d9336d817ee303bf1.png

可见,这个效率提升是显而易见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值