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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。