python代码优化

来源:互联网 发布:php 通过域名获取ip 编辑:程序博客网 时间:2024/05/29 17:23

python代码优化:

  • 合并尽量用 join
>>>s1,s2,s3 = 'str1','str2','str3'>>>s1+s2+s3>>>'str1 str2 str3'    '+' 为细粒度的内存资源申请    Python中字符串为不可变对象,一但创建将不能改变,故 如果使用+去连接字符串 每一次的连接都会在内存中创建一块新的内存空间,来存储连接后的字符串.所以当字符串规模越大 效率将越低, 连接时间约为s*n^2(s为复制一次字符串的平均时间)优化:    join 为粗粒度内存资源申请    合并尽量优先使用join (), join会首先计算需要申请的总的内存空间,然后一次性申请所需内存并将字符序列中的每一个元素复制到内存中去,所以join的操作时间约为 s*n>>>s1,s2,s3 = 'str1','str2','str3'>>>''.join([s1,s2,s3])>>>'str1 str2 str3'
  • 可以不用循环就不用循环
例1:   valid_tags 数据为 [('漂亮',100),('美丽',150),('丑',89)]   valid_tags_name = []   for n in valid_tags:       valid_tags_name.append(n[0])   用map优化循环:       valid_tags_name = map(lambda x : x[0], valid_tags)
2:newlist = [] for word in oldlist:    newlist.append(word.upper())优化:newlist = map(str.upper, oldlist)或者newlist = [s.upper() for s in oldlist]
3:使用dict1.get(key) 代替 if key in k_dict \使用xrange 代替range \使用字典代替List   (字典是索引查询,速度为o(1);  list为链表查询,速度为o(n))   反例:    k = [10,20,30,40,50,60,70,80,90]     for i in xrange(10000):         if i in k:    pass优化k = [10,20,30,40,50,60,70,80,90]k_dict = {i:1 for i in k}    #将list转换为dictfor i in xrange(10000):    # if i in k_dict:    if k_dict.get(i):        #使用k_dict.get(i) 优化  if i in k_dict    print i,
  • 交集优化
list_a = [1,2,3,4,5]ist_b  = [2,3,4,5,6]list_c = [a for a in list_a if a in list_b]优化:list_a = [1,2,3,4,5]list_b = [2,3,4,5,6]list_c= set(list_a)&set(list_b)