您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-附加VS扩展效率

Python-附加VS扩展效率

import timeit

def append2x(foo):
    foo.append(1)
    foo.append(1)

def extend_lst(foo):
    foo.extend([1,1])

def extend_tup(foo):
    foo.extend((1,1))


l1 = []
l2 = []
l3 = []

print timeit.timeit('append2x(l1)',setup = 'from __main__ import append2x,l1')
print timeit.timeit('extend_lst(l2)',setup = 'from __main__ import extend_lst,l2')
print timeit.timeit('extend_tup(l3)',setup = 'from __main__ import extend_tup,l3')

这是一个简单的基准。我的结果(os-X,10.5.8,core2duo,FWIW):

0.520906925201  #append
0.602569103241  #extend-list
0.357008934021  #extend-tuple

结果与我的linux盒(Ubuntu,x86-64核心i7)的排序相同:

0.307395935059  #append
0.319436073303  #extend-list
0.238317012787  #extend-tuple

对我来说,这表示extend速度比快append,但与创建alist相比,创建a相对昂贵tuple

在下面的注释中指出,由于元组的不变性,解释器可以优化元组的创建(它会创建一次元组并一遍又一遍地重复使用)。如果我们将代码更改为:

def extend_lst(foo):  
    v = 1
    foo.extend([v,v])

def extend_tup(foo):
    v = 1
    foo.extend((v,v))

时间实际上是相同的:

0.297003984451  #append
0.344678163528  #extend-list
0.292304992676  #extend-tuple

尽管在我进行的所有试用中,它tuple仍然始终胜过列表版本,并且几乎没有超出该append版本。

有一两件事,我正在远离这一切的是,如果你是循环访问由所有文字的对象,选择tuple一个list。如果它不完全由文字组成,那么选择list还是都不重要tuple

python 2022/1/1 18:48:38 有355人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶