python循环速度,python几种循环方式
大家好,我是somenzz,今天我们要学习Python中最快的循环。
比如各种姿势有一个简单的任务,就是从1个积累到1亿个。我们至少可以通过以下7种方式来实现:
1.while循环定义while_loop(n=100_000_000):
i=0
s=0
当我在:
s=i
i=1
S2,for循环定义for_loop(n=100_000_000):
s=0
对于范围内的I(n):
s=i
return s3、sum rangedef sum _ range(n=100 _ 000 _ 000):
Return sum(range(n))4、sum generator def sum _ generator(n=100 _ 000 _ 000):
Return (I for I in range (n)) 5、求和列表合成(列表推导)def sum_list_comp(n=100_000_000):
返回sum([i for i in range(n)])6、sum numpyimport numpy
def sum_numpy(n=100_000_000):
return numpy.sum(numpy.arange(n,dtype=numpy.int64))7、sum numpy python rangeimport numpy
def sum _ numpy _ python _ range(n=100 _ 000 _ 000):
Return numpy.sum(range(n))以上七种方法得到的结果是一样的,只是耗时不同。你可以猜猜哪个方法最快,然后看看下面这段代码的执行结果:
导入时间
def main():
l_align=25
print(f { 1,while loop :{ l _ align } } { time it . time it(while _ loop,number=1):6f} )
print(f { 2,for loop :{ l _ align } } { time it . time it(for _ loop,number=1):6f} )
print(f { 3、sum range :{ l _ align } } { time it . time it(sum _ range,number=1):6f} )
print(f { 4、sum generator :{ l _ align } } { time it . time it(sum _ generator,number=1):6f} )
print(f { 5、sum list comprehension :{ l _ align } } { time it . time it(sum _ list _ comp,number=1):6f} )
print(f { 6、sum numpy :{ l _ align } } { time it . time it(sum _ numpy,number=1):6f} )
print(f { 7、sum numpy python range :{ l _ align } } { time it . time it(sum _ numpy _ python _ range,number=1):6f} )
if __name__==__main__ :
main()的执行结果如下:
对于来说,更快的方法本质上是做与while相同的事情,但while是纯Python代码,而for调用C扩展来递增和检查变量的边界。我们知道CPython解释器是用C语言写的,Python代码比C代码慢,而for循环代表C,while循环代表Python,所以for比while快。
Numpy内置的sum比Python的sum快。numpy主要是用C写的,同样的函数肯定比numpy的快。同样,numpy的arange肯定比Python的range快。
穿越较慢的numpy之和与Python的range结合,结果耗时最长。参见方法7。最好使用numpy包来完成任务,像方法6。
生成器比列表派生快。生成器比较懒,不会一下子生成一亿个数字。但是,列表派生会一次性应用于所有数字,因此性能稍差,因为它占用大量内存,无法有效利用缓存。
最后,本文分享了几种遍历求和的方法,比较了它们的性能,并给出了相应的结论。如果有帮助,请给我点个赞。如果转发,你会很感激。
关注Python VII,轻松学会一个小技术。
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。