zoukankan      html  css  js  c++  java
  • python list 的+、+=和extend操作

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

    于是测试了一把:

    import time
    
    def time_cost(func):
        def _time_cost(*args,**kw):
            t1=time.time()
            func(*args,**kw)
            t2=time.time()
            return t2-t1
        return _time_cost
    
    @time_cost
    def test_add(list_a,huge_list_b):
        return list_a+huge_list_b
    @time_cost
    def 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 seconds
    extend cost:0.591000080109 seconds
    -----small list test-------------
    add cost:0.0 seconds
    extend cost:0.0 seconds
    

      

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

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

    +=等同于extend,如下:

    import time
    
    def time_cost(func):
        def _time_cost(*args,**kw):
            t1=time.time()
            func(*args,**kw)
            t2=time.time()
            return t2-t1
        return _time_cost
    
    @time_cost
    def test_add(list_a,huge_list_b):
        list_a+=huge_list_b
        return list_a
    @time_cost
    def 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 seconds
    extend cost:0.510999917984 seconds
    

      

  • 相关阅读:
    MobaXterm
    记一次完整的java项目压力测试
    jvm调优
    好用的公共dns服务器推荐(免费)
    SpringBoot,Security4, redis共享session,分布式SESSION并发控制,同账号只能登录一次
    javaCV资料目录
    基于JavaCV技术实现RTMP推流和拉流功能
    Java线程池详解
    微服务实战SpringCloud之Feign简介及使用
    【DP专题】——洛谷P5144蜈蚣
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4187703.html
Copyright © 2011-2022 走看看