python如何提高工作效率,python 速度优化

  python如何提高工作效率,python 速度优化

  优化python效率的方法:1。优化算法的时间复杂度;2.减少冗余数据;3.使用copy和deepcopy合理地;4.使用dict或set查找元素;5.合理使用发电机和产量。

  优化方法:

  (推荐教程:Python入门)

  1、优化算法时间复杂度

  算法的时间复杂度影响程序的执行效率。在Python中,可以通过选择适当的数据结构来优化时间复杂度。例如,在list和set中查找一个元素的时间复杂度分别为O(n)和O(1)。

  2、减少冗余数据

  例如上三角形或下三角形,以保存大型对称矩阵。稀疏矩阵用于0元素占多数的矩阵。

  3、合理使用copy与deepcopy

  对于dict、list等数据结构的对象,直接赋值使用引用的方式。在某些情况下,需要复制整个对象。在这种情况下,可以使用复制包中的copy和deepcopy。这两个函数的区别在于后者是递归复制的。效率也不同:(以下程序运行在ipython中)

  导入副本

  a=范围(100000)

  %timeit-n10copy.copy(a)#运行copy.copy(a) 10次。

  %timeit-n10copy.deepcopy(a)

  10圈,1.55圈最佳成绩

  1Loops,bestof:151 MSPERLOOPTIMEIT。它后面的-n表示运行次数,最后两行对应两个timeit的输出,下同。可以看出,后者慢了一个数量级。

  4、使用dict或set查找元素

  Python的dict和set都是用哈希表实现的(类似于c 11标准库中的unordered_map),查找元素的时间复杂度为O(1)

  a=范围(1000)

  s=集合(a)

  d=dict((i,1)foriina)

  %timeit-n10000100ind

  %timeit-n10000100ins

  10000圈,最佳3333643.5圈

  10000个循环,Bestof :49.6 NSPERLOOPDICT效率略高(且占用空间更大)。

  5、合理使用生成器(generator)和yield

  % time it-n100a=(iforinrange(100000))

  % time it-n100b=[iforinrange(100000)]

  100圈,3:1.54圈最佳成绩

  100次循环,bestof:4.56msperloop使用()获取一个生成器对象,所需内存空间与链表大小无关,所以效率会更高。比如在具体应用中,set (I for I in range (100,000))会比set ([I for I in range (100,000)])快。

  但是对于循环遍历的情况:

  % time it-n10 for Xin(iforinrange(100000)): pass

  % time it-n10 for Xin[iforinrange(100000)]: pass

  10圈,6.51圈最佳成绩

  1Loops,Bestof :5.54 msperloop后者效率更高,但如果循环出现中断,那么使用generator的好处是显而易见的。Yield还用于创建一个生成器:

  defyield_func(ls):

  foriinls:

  伊尔地1号

  defnot_yield_func(ls):

  返回[I 1 for linls]

  ls=范围(1000000)

  % time it-n10 for iin yield _ func(ls): pass

  % time it-n10 for iin not _ yield _ func(ls): pass

  10圈,最佳3:63.8圈

  1Loops,bestof:62.9 msperloop对于内存来说并不是一个非常大的列表,可以直接返回一个列表,但是可读性yield更好(个人喜好)。

  Python2.x内置了生成器函数,如xrange函数、itertools包等。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: