gpt4 book ai didi

Python - append VS extend 效率

转载 作者:太空狗 更新时间:2023-10-29 17:24:31 27 4
gpt4 key购买 nike

这是我使用 Python 编写的一些代码:

from math import sqrt
abundant_list = []

for i in range(12,28123+1):
dividor_list = [1]
for j in range(2, int(sqrt(i))+1):
if i%j == 0:
dividor_list.extend([i/j,j])
if sum(dividor_list) > i:
abundant_list.append(i)

print abundant_list

如您所见,代码确实在尽可能地提高效率。

如果我使用 list.append 两次,或者 list.extend 只使用一次,有什么不同吗?我知道这可能存在细微差别,但我真的很想知道 :)

最佳答案

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

对我来说,这表示 extendappend 快,但是创建 list 与创建 相比相对昂贵>元组


编辑

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

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 - append VS extend 效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com