Python中最快的循环姿势实例详解

目录
  • 各种姿势
  • 比较快的姿势
  • 最后

各种姿势

比如说有一个简单的任务,就是从 1 累加到 1 亿,我们至少可以有 7 种方法来实现,列举如下:

1、while 循环

def while_loop(n=100_000_000):
    i = 0
    s = 0
    while i < n:
        s += i
        i += 1
    return s

2、for 循环

def for_loop(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
    return s

3、sum range

def sum_range(n=100_000_000):
    return sum(range(n))

4、sum generator(生成器)

def sum_generator(n=100_000_000):
    return sum(i for i in range(n))

5、sum list comprehension(列表推导式)

def sum_list_comp(n=100_000_000):
    return sum([i for i in range(n)])

6、sum numpy

import numpy
def sum_numpy(n=100_000_000):
    return numpy.sum(numpy.arange(n, dtype=numpy.int64))

7、sum numpy python range

import numpy
def sum_numpy_python_range(n=100_000_000):
    return numpy.sum(range(n))

上述 7 种方法得到的结果是一样的,但是消耗的时间却各不相同,你可以猜测一下哪一个方法最快,然后看下面代码的执行结果:

import timeit

def main():
    l_align = 25
    print(f'{"1、while 循环":<{l_align}} {timeit.timeit(while_loop, number=1):.6f}')
    print(f"{'2、for 循环':<{l_align}}  {timeit.timeit(for_loop, number=1):.6f}")
    print(f'{"3、sum range":<{l_align}} {timeit.timeit(sum_range, number=1):.6f}')
    print(f'{"4、sum generator":<{l_align}} {timeit.timeit(sum_generator, number=1):.6f}')
    print(f'{"5、sum list comprehension":<{l_align}} {timeit.timeit(sum_list_comp, number=1):.6f}')
    print(f'{"6、sum numpy":<{l_align}} {timeit.timeit(sum_numpy, number=1):.6f}')
    print(f'{"7、sum numpy python range":<{l_align}} {timeit.timeit(sum_numpy_python_range, number=1):.6f}')

if __name__ == '__main__':
    main()

执行结果如下所示:

比较快的姿势

for 比 while 块

for 和 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 的 sum 与 Python 的 range 结合使用,结果耗时最长,见方法 7。最好是都使用 numpy 包来完成任务,像方法 6。

生成器比列表推导式更快

生成器是惰性的,不会一下子生成 1 亿个数字,而列表推导式会一下子申请全部的数字,内存占有较高不说,还不能有效地利用缓存,因此性能稍差。

最后

本文分享了几种遍历求和的方法,对比了它们的性能,给出了相应的结论

到此这篇关于Python中最快循环姿势的文章就介绍到这了,更多相关Python最快循环姿势内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句. 二.详解 1.if语句 Python中的if子句由三部分组成:关键字本身.用于判断结果真假的条件表达式以及当表达式为真或者非零时执行的代码块.if 语句的语法如下: if expression: expr_true_suite if 语句的expr_true_suite代码块只有在条件表达式的结

  • 详解Python中for循环的使用

    for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程" 一文讨论了 if 语句和 while 循环,讨论了复合语句以及适当缩进 Python 语句来指示相关 Python 代码块.该文的结尾介绍了 Python for 循环.但就其使用和功能来说,for 循环更值得关注,所以本文单独讲述该循环. for 循环有一个简单的语法,使您可以从容器对象中提取单个项目并对其进行某些操作.简单地说,使用 for 循环,可以迭代中对象集合的项目.对象集合可以是任何 P

  • 跟老齐学Python之用while来循环

    在python中,它也有这个含义,不过有点区别的是,"当...时候"这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python做好多事情.就好比这样一段情景: while 年龄大于60岁:-------->当年龄大于60岁的时候     退休            -------->凡是符合上述条件就执行的动作 展开想象,如果制作一道门,这道门就是用上述的条件调控开关的,假设有很多人经过这个们,报上年龄,只要年龄大于60,就退休(门打开,人可以出去),一个接一

  • Python中在for循环中嵌套使用if和else语句的技巧

    for...[if]...构建List (List comprehension) 1.简单的for...[if]...语句 Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的.下面举几个简单的例子进行说明. >>> a=[12, 3, 4, 6, 7, 13, 21] >>> newList = [x for x in a] >>> newL

  • 详解Python中for循环的使用方法

    for循环在Python中有遍历所有序列的项目,如列表或一个字符串. 语法: for循环语法如下: for iterating_var in sequence: statements(s) 如果一个序列包含一个表达式列表,计算第一个.然后,在序列中的第一项被分配给迭代变量iterating_var.接着,语句块被执行.列表中的每个项目分配给iterating_var,并且statement块被执行,直到整个序列完成(到尾部). 流程图: 例子: #!/usr/bin/python for let

  • 全面解析Python的While循环语句的使用方法

    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行语句可以是单个语句或语句块.判断条件可以是任何表达式,任何非零.或非空(null)的值均为true. 当判断条件假false时,循环结束. 执行流程图如下: 实例: #!/usr/bin/python count = 0 while (count < 9): print 'The count is:', count cou

  • Python跳出循环语句continue与break的区别

    虽然在Python中的for循环与其它语言不大一样,但跳出循环还是与大多数语言一样,可以使用关键字continue跳出本次循环或者break跳出整个for循环. break 复制代码 代码如下: # encoding=UTF-8   for x in range(10):     if x==5:         break       print x 上面使用的break循环,所以执行到x==5的时候就跳出了整个for循环,因此print x语句只打到4的时候就终止了,因此输出结果如图: co

  • python中for循环把字符串或者字典添加到列表的方法

    python中如何for循环把字符串添加到列表? 实例: 1.单个字符串用for循环添加到列表中: # 把L1中的字符串添加到列表alist里面 L1 = 'MJlifeBlog' alist = [] # 可以用forin来迭代L1并保存值到x变量里头即可. # 接着在for循环里边用append方法即可把解析到的单个字符添加到列表了. for x in L1: alist.append(x) print(alist) 2.多个字符串用for循环添加到列表中: # 如果需要把多个字符串添加到列

  • python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list. 实例 复制代码 代码如下: a = ['cat', 'window', 'defenestrate'] for x in a:      print x, len(x) for x in [1, 2, 3]: print x,    

  • Python中for循环详解

    与其它大多数语言一样,Python 也拥有 for 循环.你到现在还未曾看到它们的唯一原因就是,Python 在其它太多的方面表现出色,通常你不需要它们. 其它大多数语言没有像 Python 一样的强大的 list 数据类型,所以你需要亲自做很多事情,指定开始,结束和步长,来定义一定范围的整数或字符或其它可重复的实体.但是在 Python 中,for 循环简单地在一个列表上循环,与 list 解析的工作方式相同. 1. for  循环介绍 复制代码 代码如下: >>> li = ['a'

随机推荐