首页 > 代码库 > python list 的+、+=和extend操作

python list 的+、+=和extend操作

据说后者在list很大的时候性能稍好。

于是测试了一把:

import timedef time_cost(func):    def _time_cost(*args,**kw):        t1=time.time()        func(*args,**kw)        t2=time.time()        return t2-t1    return _time_cost@time_costdef test_add(list_a,huge_list_b):    return list_a+huge_list_b@time_costdef test_extend(list_a,huge_list_b):    return list_a.extend(huge_list_b)if __name__==‘__main__‘:    print ‘-----big list test-------------‘    a=[1]*1000    b=[‘a‘]*(10**8)    print ‘add cost:%s seconds‘%test_add(a,b)    print ‘extend cost:%s seconds‘%test_extend(a,b)    print ‘-----small list test-------------‘    a=[1]*1000    b=[‘a‘]*(10**2)    print ‘add cost:%s seconds‘%test_add(a,b)    print ‘extend cost:%s seconds‘%test_extend(a,b)

  

  

我机器是win7,64bit,6G 内存,i3 cpu,结果如下:

-----big list test-------------add cost:1.30500006676 secondsextend cost:0.591000080109 seconds-----small list test-------------add cost:0.0 secondsextend cost:0.0 seconds

  

在b为10^8长度的时候,extend所耗的时间几乎只有+操作的一半。

在1000长度的级别,相差不大。几乎相同。

 

+=等同于extend,如下:

import timedef time_cost(func):    def _time_cost(*args,**kw):        t1=time.time()        func(*args,**kw)        t2=time.time()        return t2-t1    return _time_cost@time_costdef test_add(list_a,huge_list_b):    list_a+=huge_list_b    return list_a@time_costdef test_extend(list_a,huge_list_b):    return list_a.extend(huge_list_b)if __name__==‘__main__‘:    print ‘-----big list test-------------‘    a=[1]*1000    b=[‘a‘]*(10**8)    a2=[1]*1000    print ‘+= cost:%s seconds‘%test_add(a,b)    print ‘extend cost:%s seconds‘%test_extend(a2,b)

 输出:

-----big list test-------------+= cost:0.506999969482 secondsextend cost:0.510999917984 seconds

  

python list 的+、+=和extend操作