from time import time
t = time()
List = [ a,b,is,python,jason,hello,hill,with,phone,test,
dfdf,apple,pddf,ind,basic,none,baecr,var,bana,dd,wrd ]
#List = dict.fromkeys(List,True)
print List
filter = []
for i in range (1000000):
for find in [ is,hat,new,List,old,. ]:
if find not in List:
filter.append(find)
print "total run time:"
print time()-t
上述代码运行大概需要 16.09seconds。如果去掉行 #List = dict.fromkeys(List,True) 的注释,将 List 转换为字典之后再运行,时间大约为 8.375 seconds,效率大概提高了一半。因此在需要多数据成员进行频繁的查找或者访问的时候,使用 dict 而不是 List 是一个较好的选择。集合 (set) 与列表 (List)set 的 union, intersection,difference *** 作要比 List 的迭代要快。因此如果涉及到求 List 交集,并集或者差的问题可以转换为 set 来 *** 作。清单 2. 求 List 的交集:
from time import time
t = time()
Lista=[1,2,3,4,5,6,7,8,9,13,34,53,42,44]
Listb=[2,23]
intersection=[]
for i in range (1000000):
for a in Lista:
for b in Listb:
if a == b:
intersection.append(a)
print "total run time:" print time()-t上述程序的运行时间大概为:total run time: 38.4070000648清单 3. 使用 set 求交集from time import time t = time() Lista=[1,44] Listb=[2,23] intersection=[] for i in range (1000000): List(set(Lista)&set(Listb)) print "total run time:" print time()-t改为 set 后程序的运行时间缩减为 8.75,提高了 4 倍多,运行时间大大缩短。读者可以自行使用表 1 其他的 *** 作进行测试。表 1. set 常见用法set(List1) | set(List2) union 包含 List1 和 List2 所有数据的新集合set(List1) & set(List2) intersection 包含 List1 和 List2 中共同元素的新集合set(List1) - set(List2) difference 在 List1 中出现但不在 List2 中出现的元素的集合对循环的优化对循环的优化所遵循的原则是尽量减少循环过程中的计算量,有多重循环的尽量将内层的计算提到上一层。下面通过实例来对比循环优化后所带来的性能的提高。程序清单 4 中,如果不进行循环优化,其大概的运行时间约为 132.375。清单 4. 为进行循环优化前from time import time t = time() Lista = [1,10] Listb =[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01] for i in range (1000000): for a in range(len(Lista)): for b in range(len(Listb)): x=Lista[a]+Listb[b] print "total run time:" print time()-t现在进行如下优化,将长度计算提到循环外,range 用 xrange 代替,同时将第三层的计算 Lista[a] 提到循环的第二层。清单 5. 循环优化后from time import time t = time() Lista = [1,0.01] len1=len(Lista) len2=len(Listb) for i in xrange (1000000): for a in xrange(len1): temp=Lista[a] for b in xrange(len2): x=temp+Listb[b] print "total run time:" print time()-t上述优化后的程序其运行时间缩短为 102.171999931。在清单 4 中 Lista[a] 被计算的次数为 10000001010,而在优化后的代码中被计算的次数为 1000000*10,计算次数大幅度缩短,因此性能有所提升。充分利用 Lazy if-evaluation 的特性python 中条件表达式是 lazy evaluation 的,也就是说如果存在条件表达式 if x and y,在 x 为 false 的情况下 y 表达式的值将不再计算。因此可以利用该特性在一定程度上提高程序效率。清单 6. 利用 Lazy if-evaluation 的特性
总结以上是内存溢出为你收集整理的OA信用盘盘口制作详解 Python 代码优化技巧全部内容,希望文章能够帮你解决OA信用盘盘口制作详解 Python 代码优化技巧所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)